创建二叉树的代码(左孩子的值要小于双亲节点,右孩子的值要大于双亲结点):
class Tree //节点类
{
Tree left; //指向左孩子节点
Tree right; //指向右孩子节点
int data;
public Tree() {}
public Tree(int data) {
this.left=null;
this.right=null;
this.data=data;
}
public static void insert(Tree root,int data) //参数为树的根节点和要插入的节点
{
if(root!=null)
{
if(root.data>=data)
{
if(root.left==null)
{
root.left=new Tree(data);
}
else
{
insert(root.left,data); //若子树根节点的左节点为空则继续向下递归
}
}
else
{
if(root.right==null)
{
root.right=new Tree(data);
}
else
{
insert(root.right,data); //与左节点的操作相同
}
}
}
}
}
1.前序遍历
- 规则是若二叉树为空,则退出操作
- 若二叉树不为空,则先访问根节点
- 再访问根节点的左孩子节点
- 再以左孩子为根节点的树重复2-3操作
- 直到递推找到左子树为空的子树根结点
- 再访问5中根节点的右孩子,并以该右孩子为根新子树的根节点,并重复3-6直到遍历完整个树
代码如下
public static void PreOrderTraverse(Tree a) //前序遍历算法
{
if(a==null) //当这是一个空树的时候直接退出函数
{
return;
}
System.out.println(a.data); //获得当前节点的数据值
PreOrderTraverse(a.left);
PreOrderTraverse(a.right);
}
前序遍历图解:
2. 中序遍历
- 规则为若树为空,则空操作返回
- 否则从根结点开始(不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树
代码如下:
public static void InOderTraverse(Tree a) //中序遍历算法
{
if(a==null) //当这是一个空树的时候直接退出函数
{
return;
}
InOderTraverse(a.left);
System.out.println(a.data); //获得当前节点的数据值
InOderTraverse(a.right);
}
中序遍历图解:
后序遍历
- 规则为若树为空,则空操作返回
- 否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点
代码如下:
public static void PostOrderTraverse(Tree a) //后序遍历算法
{
if(a==null) //当这是一个空树的时候直接退出函数
{
return;
}
PostOrderTraverse(a.left);
PostOrderTraverse(a.right);
System.out.println(a.data); //获得当前节点的数据值
}
后序遍历的图解: