1. 程式人生 > >二叉樹的中序遍歷(遞迴和非遞迴版本)

二叉樹的中序遍歷(遞迴和非遞迴版本)

轉自來自微信公眾號,一個專注應屆生網際網路求職分享的公眾號,公眾號ID:“菜鳥名企夢”

難易程度:★★

重要性:★★★★★

樹結構是面試中的考察的重點,而樹的遍歷又是樹結構的基礎。中序遍歷的非遞迴版本要求重點理解掌握。

//先序遍歷,遞迴版本
public static ArrayList<Integer> preOrder(TreeNode root) {
        ArrayList<Integer> res = new ArrayList<Integer>();

        Stack<TreeNode> s = new Stack<TreeNode>();
        s.push(root);
        while (!s.isEmpty()) {
            TreeNode tem = s.pop();// 根節點出棧

            // 把根節點加入結果集 前序遍歷順序:根、左,右 所以對應的進棧順序為:右、左(根節點進棧後馬上出棧了)
            res.add(tem.val);
            if (tem.right != null)
                s.push(tem.right);
            if (tem.left != null)
                s.push(tem.left);
        }
        return res;
    }
    
    /**
     * 先序遍歷,遞迴版本
     * @param root
     * @return
     */
    public static ArrayList<Integer> preOrder(TreeNode root){
        ArrayList<Integer> res = new ArrayList<Integer>();

        preOrder(root,res);
        return res;
    }
    private static void preOrder(TreeNode root,ArrayList<Integer> res) {
        if(root==null)  return;

        res.add(root.val);
        preOrder(root.left);
        preOrder(root.right);
    }

轉自來自微信公眾號,一個專注應屆生網際網路求職分享的公眾號,公眾號ID:“菜鳥名企夢”