java 二叉树先序_Java实现二叉树 先序、中序和后序遍历

public classBinaryTree1 {public Node init() {//注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错

Node J = new Node(8, null, null);

Node H= new Node(4, null, null);

Node G= new Node(2, null, null);

Node F= new Node(7, null, J);

Node E= new Node(5, H, null);

Node D= new Node(1, null, G);

Node C= new Node(9, F, null);

Node B= new Node(3, D, E);

Node A= new Node(6, B, C);return A; //返回根节点

}public voidprintNode(Node node){

System.out.print(node.getData());

}public void theFirstTraversal_Stack(Node root) { //先序遍历

Stack stack = new Stack();

Node node=root;while (node != null || stack.size() > 0) { //将所有左孩子压栈

if (node != null) { //压栈之前先访问

printNode(node);

stack.push(node);

node=node.getLeftNode();

}else{

node=stack.pop();

node=node.getRightNode();

}

}

}public void theInOrderTraversal_Stack(Node root) { //中序遍历

Stack stack = new Stack();

Node node=root;while (node != null || stack.size() > 0) {if (node != null) {

stack.push(node);//直接压栈

node =node.getLeftNode();

}else{

node= stack.pop(); //出栈并访问

printNode(node);

node=node.getRightNode();

}

}

}public void thePostOrderTraversal_Stack(Node root) { //后序遍历

Stack stack = new Stack();

Stack output = new Stack();//构造一个中间栈来存储逆后序遍历的结果

Node node =root;while (node != null || stack.size() > 0) {if (node != null) {

output.push(node);

stack.push(node);

node=node.getRightNode();

}else{

node=stack.pop();

node=node.getLeftNode();

}

}

System.out.println(output.size());while (output.size() > 0) {

printNode(output.pop());

}

}public static voidmain(String[] args) {

BinaryTree1 tree= newBinaryTree1();

Node root=tree.init();

System.out.println("先序遍历");

tree.theFirstTraversal_Stack(root);

System.out.println("");

System.out.println("中序遍历");

tree.theInOrderTraversal_Stack(root);

System.out.println("");

System.out.println("后序遍历");

tree.thePostOrderTraversal_Stack(root);

System.out.println("");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值