二叉树--中序遍历的递归和非递归(leetcode 94

非递归

步骤:

1.申请一个栈,初始时令temp为root

2.先将temp压入stack,对以temp为头节点的子树来说,依次把左边界压入,不断令temp = temp.left

3.不断重复步骤2,直到temp为空。此时从stack中pop出一个节点,记为新的temp,打印temp的值,并且让temp = temp.right,然后继续重复步骤2

4.直到stack为空temp为空的时候结束过程

代码:

    public List<Integer> inorderTraversal1(TreeNode root){
        List<Integer> list = new LinkedList<>();
        if (root == null) {
            return list;
        }
        Stack<TreeNode> stack = new Stack<> ();
        TreeNode temp = root;
        while (!stack.isEmpty() || temp != null){
            if (temp != null){
                stack.push(temp);
                temp = temp.left;
            }else {
                temp = stack.pop();
                list.add(temp.val);
                temp = temp.right;
            }
        }

        return list;
    }

递归

    List<Integer> list = new ArrayList<Integer> ();

    public List<Integer> inorderTraversal(TreeNode root) {
        if (root == null){
            return list;
        }
        inorderTraversal(root.left);

        list.add(root.val);

        inorderTraversal(root.right);

        return list;
    }

猜你喜欢

转载自www.cnblogs.com/swifthao/p/13211185.html