class HeroNode{
private int no;
private String name;
private HeroNode left;
private HeroNode right;
public void preOrder(){//前序遍历
System.out.println(this);
if (this.left!=null){
this.left.preOrder();
}
if (this.right!=null){
this.right.preOrder();
}
}
}
class BinaryTree{
private HeroNode root;
public void leftOrder(){
if (this.root!=null){
this.root.preOrder();
}else {
System.out.println("二叉树为空");
}
}
}
建立一个 根节点root 为1
root的左节点为2,右节点为3
右节点的右节点为4的二叉树
public class BinaryTreeDemo {
public static void main(String[] args) {
HeroNode root = new HeroNode(1, "松江");
HeroNode node2 = new HeroNode(2, "雷锋");
HeroNode node3 = new HeroNode(3, "小米");
HeroNode node4 = new HeroNode(4, "码云");
BinaryTree binaryTree = new BinaryTree();
binaryTree.setRoot(root);
root.setLeft(node2);
root.setRight(node3);
node3.setRight(node4);
binaryTree.leftOrder();
}
}
开始debug
这里会发现this是代表的root根节点,也就是no为1,name=松江的节点,将其输出
开始下一步
这里this.left代表的是根节点下的左节点
看图可以得知是no为2,name=雷锋的节点
判断得到其不为空,以其开始递归进入前序遍历方法
进入后会发现这时会输出此节点(no为2,name=雷锋的节点),这时就已经遍历输出了2个节点
走下一步会发现判断当前雷锋的节点左节点右节点都为空
这时会退出雷锋节点的preOrder()递归方法,然而根节点preOrder这个方法还未执行完毕
开始进行 根节点的this.right的的判断
这时会发现 右节点为3是小米的节点
然后和上面的过程一样
进入小米的节点的preOrder方法
遍历输出了小米节点
由图看出输出了最后一道节点
这样输出方式就是1,2,3,4
进行了一遍前序遍历