初级5 二叉树

题目一:实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式

 递归版:递归来到每个节点的顺序

前序遍历  打印时机放在第1次来到这个节点的时候

 中序遍历  打印时机放在第2次来到这个节点的时候

 后序遍历  打印时机放在第3次来到这个节点的时候

    // 递归版本--先序遍历
    public static void preOrderRecur(Node head) {
        if (head == null) {
            return;
        }
        // System.out.print(head.value + " ");
        preOrderRecur(head.left);
        preOrderRecur(head.right);
    }

非递归版:stack栈

1,2,4,5,3,6,7

    // 非递归--前序遍历
    public static void preOrderUnRecur(Node head) {
        System.out.print("pre-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<Node>();
            stack.add(head);
            while (!stack.isEmpty()) {
                head = stack.pop();
                System.out.print(head.value + " ");
                
                //如果有右孩子,先压右
                // 如果有左孩子,后压左
                if (head.right != null) {
                    stack.push(head.right);
                }
                if (head.left != null) {
                    stack.push(head.left);
                }
            }
        }
        System.out.println();
    }

中左右被 模拟出来了

 先压右后压左

先弹左,后弹右

 

为什么不用队列?

递归函数就是一种栈

 

二叉树只有从上到下的路径,没有回去的路径

 非递归--中序遍历

猜你喜欢

转载自www.cnblogs.com/venicid/p/10061891.html