`

Binary Tree Postorder Traversal

阅读更多
Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},
   1
    \
     2
    /
   3
return [3,2,1].

输出一颗树的后序遍历序列。我们可以用递归和迭代两种方法。用迭代时我们借助堆栈,因为是后序遍历,顺序为左-右-根,因此我们只需要通过根-右-左的顺序进行遍历,然后将序列翻转就可以了。代码如下:
递归:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        if(root == null) return list;
        getPostorder(root, list);
        return list;
    }
    public void getPostorder(TreeNode root, List<Integer> list) {
        if(root == null) return;
        getPostorder(root.left, list);
        getPostorder(root.right, list);
        list.add(root.val);
    }
}


迭代:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        if(root == null) return list;
        stack.add(root);
        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();
            list.addFirst(node.val);
            if(node.left != null) {
                stack.push(node.left);
            }
            if(node.right != null) {
                stack.push(node.right);
            }
        }
        return list;
    }
}
分享到:
评论

相关推荐

    145.Binary Tree Postorder Traversal二叉树的后序遍历【LeetCode单题讲解系列】

    145.Binary_Tree_Postorder_Traversal二叉树的后序遍历【LeetCode单题讲解系列】

    陈越、何钦铭-数据结构作业11:Tree Traversals Again二叉树非递归遍历/栈遍历

    An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node ... Your task is to give the postorder traversal sequence of this tree.

    python-leetcode题解之145-Binary-Tree-Postorder-Traversal

    python python_leetcode题解之145_Binary_Tree_Postorder_Traversal

    leetcode-tree

    144-Binary Tree Preorder Traversal94-Binary Tree Inorder Traversal145-Binary Tree Postorder Traversal(后续的非递归时间不够可以先跳过,有点难)层次遍历,队列辅助,相当于广搜。102-Binary Tree Level ...

    js-leetcode题解之145-binary-tree-postorder-traversal.js

    javascript js_leetcode题解之145-binary-tree-postorder-traversal.js

    Binary tree traversal.zip

    在这个名为"Binary tree traversal.zip"的压缩包中,包含了作者在算法课上完成的一个关于二叉树遍历的作业。这个作业使用C++编程语言,并在Visual Studio 2019环境下编写。以下是关于二叉树遍历的详细知识: 1. **...

    leetcode卡-LeetCode:我的LeetCode解决方案

    leetcode卡 LeetCode 记录一下再LeetCode上...Postorder Traversal], Tree/stack 2017.06.20 打卡[LeetCode 107. Binary Tree Level Order Traversal II], Tree/BFS 2017.06.20 打卡[LeetCode 324. Wiggle Sort II], S

    Java Binary Tree Order

    `BinaryTree_PostOrder.java`可能包含了这种实现。递归版本会先遍历左子树,然后右子树,最后访问根节点。 4. **前序遍历(Preorder Traversal)** 前序遍历按照“根-左-右”的顺序访问节点,常用于复制整棵树或者...

    二叉树详解 binary tree

    - 后序遍历 (Postorder Traversal) - 层次遍历 (Level Order Traversal) ##### 2.2 进阶操作 - **查找**: 在二叉树中查找特定的节点。 - **插入**: 向二叉树中插入新的节点。 - **删除**: 从二叉树中删除特定的...

    LeetCodeSolution:LeetCode的部分解决方案

    Binary Tree Postorder Traversal (145) 要求不用递归实现后序遍历 后序是left-right-root,那么首先用修正的前序root-right-left,然后reverse一下,变成left-right-root就行了,代码如下: Factorial Trailing ...

    LeetCode最全代码

    * [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...

    数据结构教学课件:chapter5 A Binary Tree Node ADT.ppt

    主要有三种类型的遍历:前序遍历(Preorder Traversal)、后序遍历(Postorder Traversal)和中序遍历(Inorder Traversal)。前序遍历先访问根节点,再遍历左子树,最后遍历右子树;后序遍历则是先遍历左子树和右子...

    Binary_Tree_Level_Order_Traversa

    在标签“BinaryTree”中,我们聚焦于二叉树相关的算法和数据结构。二叉树的其他遍历方法还包括前序遍历(Preorder Traversal,根-左-右)、中序遍历(Inorder Traversal,左-根-右)和后序遍历(Postorder Traversal...

    leetcode-answer-and-analysis(part).zip_图形图像处理_Java_

    9. **Binary Tree Postorder Traversal** (二叉树的后序遍历): 后序遍历有递归和迭代两种方法。在Java中,递归方法相对简单,先遍历左子树,再遍历右子树,最后访问根节点;迭代方法通常使用栈来模拟递归过程。 10....

    LeetCode-Feb2021

    递归是解决复杂问题的有效手段,例如"Binary Tree Postorder Traversal"(二叉树后序遍历)问题,可以通过递归实现。而回溯法常用于解决组合优化问题,如"Combination Sum"(组合求和),在Java中通常结合递归来实现...

    Traverse-binary-tree.rar_traverse

    在“Traverse binary tree”程序中,这四种遍历方法都被实现,允许用户根据需求选择合适的遍历策略。对于每种遍历方法,都需要设计一个适当的算法来正确地访问每个节点,并确保所有节点只被访问一次。 总结来说,...

    二叉树的创建与遍历.zip

    然后,通过create_binary_tree函数手动创建了一个二叉树。最后,通过inorder_traversal、preorder_traversal和postorder_traversal函数实现了中序、先序和后序遍历。输出结果应该分别为:```pythonInorder Traversal...

    二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结

    3. **后序遍历(Postorder Traversal)** - **定义**:先遍历左子树,接着遍历右子树,最后访问根节点。 - **应用场景**:删除二叉树时,需要先删除叶子节点及其子树。 - **代码实现**: ```java public ...

    binaryTree.zip_Java编程_Java_

    本资料包"binaryTree.zip"主要涵盖了如何使用先根遍历、中根遍历和后根遍历这三种方法来建立二叉树。 先根遍历(Preorder Traversal)是二叉树遍历的一种,其顺序为:先访问根节点,然后遍历左子树,最后遍历右子树...

Global site tag (gtag.js) - Google Analytics