LeetCode:145.Binary Tree Post Order Traversal(二叉树后序遍历)

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3.  LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文章目录

题目描述: 

java实现方式1:

python实现方式1:

java实现方式2:

python实现方式2:

github地址:


题目描述: 

          给定一个二叉树,返回它的 后序 遍历。

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

输出: [3,2,1]

java实现方式1:

 

   /**
     * 后序遍历递归方式
     *
     * @param root 根节点
     * @return 链表
     */
    public List<Integer> postOrderTraversal(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        List<Integer> postOrderList = new ArrayList<>();
        helper(postOrderList, root);
        return postOrderList;
    }

    /**
     * 后续遍历帮助方法
     *
     * @param postOrderList 链表
     * @param root          根节点
     */
    private void helper(List<Integer> postOrderList, TreeNode root) {
        if (root.left != null) {
            helper(postOrderList, root.left);
        }
        if (root.right != null) {
            helper(postOrderList, root.right);
        }
        postOrderList.add(root.val);
    }

 时间复杂度:O(n)

空间复杂度:O(n) 


python实现方式1:

def helper(result: List[int], root: TreeNode):
    '''
        帮助方法
    Args:
        result: 结果集
        root: 根节点
    '''
    if root.left:
        helper(result, root.left)
    if root.right:
        helper(result, root.right)
    result.append(root.val)


def post_order_traversal(root: TreeNode) -> List[int]:
    '''
        后序遍历
    Args:
        res: 链表
        root: 根节点
    '''
    result = []
    if not root:
        return result
    helper(result, root)
    return result

 时间复杂度:O(n)

空间复杂度:O(n) 


java实现方式2:

   /**
     * 后序遍历非递归方式
     *
     * @param root 根节点
     * @return 链表
     */
    public List<Integer> postOrderTraversal2(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        List<Integer> res = new LinkedList<>();
        Deque<TreeNode> stack = new LinkedList<>();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node.left != null) {
                stack.push(node.left);
            }
            if (node.right != null) {
                stack.push(node.right);
            }
            res.add(0, node.val);
        }
        return res;
    }

 时间复杂度:O(n)

空间复杂度:O(n) 


python实现方式2:

def post_order_traversal2(root: TreeNode) -> List[int]:
    '''
        后序遍历
    Args:
        res: 链表
        root: 根节点
    '''
    result = []
    stack = []
    if len(root) < 1:
        return result
    stack.append(root)
    while len(stack) > 0:
        node = stack.pop()
        if root.left:
            stack.append(root.left)
        if root.right:
            stack.append(root.right)
        result.insert(0, node.val)
    return result

 时间复杂度:O(n)

空间复杂度:O(n) 


github地址:

https://github.com/zhangyu345293721/leetcode

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页