算法---------二叉樹的後序遍歷

題目:

給定一個二叉樹,返回它的 後序 遍歷。

     示例:

     輸入: [1,null,2,3]
     1
     \
     2
     /
     3

     輸出: [3,2,1]

程序入口:

        TreeNode treeNode = new TreeNode(1);
        treeNode.left = null;
        treeNode.right = new TreeNode(2);
        treeNode.right.left = new TreeNode(3);

        List<Integer> integers = postorderTraversal(treeNode);
        System.out.println(integers);

解決方法一:

    public static List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new LinkedList<>();
        reversePO(root,result);
        return result;
    }

    private static void reversePO(TreeNode root, List<Integer> result) {
        if (root != null) {
            reversePO(root.left,result);
            reversePO(root.right,result);
            result.add(root.val);
        }
    }

解決方法二:

    public static List<Integer> postorderTraversal2(TreeNode root) {
        List<Integer> result = new LinkedList<>();
        LinkedList<TreeNode> stack = new LinkedList<>();
        stack.offer(root);
        while (!stack.isEmpty()){
            TreeNode treeNode = stack.pollLast();
            if (treeNode == null) {
                continue;
            }
            if (treeNode.left == null && treeNode.right == null) {
                result.add(treeNode.val);
                continue;
            }
            stack.add(treeNode);

            if (treeNode.right != null) {
                stack.offer(treeNode.right);
            }

            if (treeNode.left != null) {
                stack.offer(treeNode.left);
            }
            treeNode.left = treeNode.right = null;
        }
        return result;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章