import java.util.LinkedList;
public class TreeNode {
//权值
int value;
//左节点
TreeNode leftnode;
//右节点
TreeNode rightnode;
//节点左边右边类型,0默认的,是左右子树,1代表是左右指针
int leftType;
int rightType;
public TreeNode(int value){
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public void setRightnode(TreeNode rightnode) {
this.rightnode = rightnode;
}
public void setLeftnode(TreeNode leftnode) {
this.leftnode = leftnode;
}
1.前序遍历
public void frontshow() {
//先遍历当前节点
System.out.println(value);
//再左节点,在左节点进行递归
if(leftnode!=null){
leftnode.frontshow();
}
if(rightnode!=null){
rightnode.frontshow();
}
}
2.中序遍历
public void middleshow() {
if(leftnode!=null){
leftnode.middleshow();
}
System.out.println(value);
if(rightnode!=null){
rightnode.middleshow();
}
}
2.后序遍历
public void lastshow() {
if(leftnode!=null){
leftnode.lastshow();
}
if(rightnode!=null){
rightnode.lastshow();
}
System.out.println(value);
}
3.层次遍历
public void Leveltraversal(TreeNode root){
/*
对于不为空的结点,先把该结点加入到队列中,从队中拿出结点,如果该结点的左右结点不为空,就分别把左右结点加入到队列中
重复以上操作直到队列为空
*/
if(root==null){
return;
}
LinkedList<TreeNode> list = new LinkedList<>();
list.add(root);
//定义一个当前节点,
TreeNode currentnode = null;
//如果队列 不为空,循环
while(!list.isEmpty()){
//将移除并返回队列的头部元素赋给当前节点
currentnode = list.poll();
//输出当前节点
System.out.println(currentnode.value);
if(currentnode.leftnode!=null){
list.add(currentnode.leftnode);
}
if(currentnode.rightnode!=null){
list.add(currentnode.rightnode);
}
}
System.out.println();
System.out.println("该树的最后一个节点"+currentnode.value);
}
4.前序查找
public TreeNode treesearch(int i) {
TreeNode target = null;
if(this.value==i){
return this;
}else{
//找左子树,并用一个变量接收结果
if(leftnode!=null){
target = leftnode.treesearch(i);
}
//如果在左子树中找到了,那么target不为空,返回接收到的值
if(target!=null){
return target;
}
if(rightnode!=null){
target = rightnode.treesearch(i);
}
}
return target;
}
5…删除
public void delete(int i) {
//将根节点定义为父节点
TreeNode parent = this;
//判断删除的数是否在根节点的左子树和右子树上
if(leftnode!=null&&leftnode.value==i){
leftnode = null;
//return;
}
if(parent.rightnode!=null&&parent.rightnode.value==i){
parent.rightnode = null;
//return;
}
//将从子树开始找的时候,将根节点的左子树或右子树看作父节点
parent = leftnode;
//从左子树的子节点和右子树的子节点开始找,采用递归
if(parent!=null){
parent.delete(i);
}
parent = rightnode;
if(parent!=null){
parent.delete(i);
}
}
}
本文详细介绍了二叉树的前序、中序、后序及层次遍历方法,探讨了二叉树的查找与删除操作实现。通过具体代码示例,深入解析了二叉树节点的创建与管理。

1万+

被折叠的 条评论
为什么被折叠?



