Java二叉树的中序遍历

LeetCode

思想

  • 输出顺序
    左>中>右

算法(非递归)

    public ArrayList<Integer> inorderTraversal(TreeNode root) {
    
    
        //存储结果
        ArrayList<Integer> result = new ArrayList<>();
        //判空
        if (root == null) return result;
        TreeNode temp = root;
        //使用栈来解决
        Stack<TreeNode> stack = new Stack<>();
        while (!stack.isEmpty() || temp != null) {
    
    
            //先将所有左子树添加到栈中
            while (temp != null) {
    
    
                stack.push(temp);
                temp = temp.left;
            }
            //出栈
            temp = stack.pop();
            result.add(temp.val);
            //添加右结点入栈
            temp = temp.right;
        }
        return result;
    }

算法(递归)

    public ArrayList<Integer> inorderTraversal(TreeNode root) {
    
    
        //存储结果
        ArrayList<Integer> result = new ArrayList<>();
        //判空
        if (root == null) return result;
        //递归依次调用,左中右
        result.addAll(inorderTraversal(root.left));
        result.add(root.val);
        result.addAll(inorderTraversal(root.right));
        return result;
    }

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/114035300