day26--二叉树深度遍历的栈实现 (前序和后序)

前序与中序的区别在于输出顺序不同,后序需要一个输出栈存放输出数据,
代码:

 public void preOrderVisitWithStack() {
        ObjectStack tempStack = new ObjectStack();
        BinaryCharTree tempNode = this;
        while (!tempStack.isEmpty() || tempNode != null) {
            if (tempNode != null) {
                System.out.print("" + tempNode.value + " ");
                tempStack.push(tempNode);
                tempNode = tempNode.leftChild;
            } else {
                tempNode = (BinaryCharTree) tempStack.pop();
                tempNode = tempNode.rightChild;
            } // Of if
        } // Of while
    }// Of preOrderVisitWithStack

    public void postOrderVisitWithStack() {
        ObjectStack tempStack = new ObjectStack();
        BinaryCharTree tempNode = this;
        ObjectStack tempOutputStack = new ObjectStack();

        while (!tempStack.isEmpty() || tempNode != null) {
            if(tempNode != null) {
                tempOutputStack.push(new Character(tempNode.value));
                tempStack.push(tempNode);
                tempNode = tempNode.rightChild;
            } else {
                tempNode = (BinaryCharTree) tempStack.pop();
                tempNode = tempNode.leftChild;
            }// of if
        }// of while
        while (!tempOutputStack.isEmpty()) {
            System.out.print("" + tempOutputStack.pop() + " ");
        }//Of while
    }// of postOrderVisitWithStack

测试用例:

        char[] tempCharArray = {'A','B','C','D','E','F'};
        int[] tempIndicesArray = {0,1,2,4,5,12};
        BinaryCharTree tempTree2 = new BinaryCharTree(tempCharArray,tempIndicesArray);
        System.out.println("\r\nPre-order visit with stack:");
        tempTree2.preOrderVisitWithStack();
        System.out.println("\r\nPost-order visit with stack:");
        tempTree2.postOrderVisitWithStack();

运行结果:

Pre-order visit with stack:
A B D C E F 
Post-order visit with stack:
D B F E C A 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值