LeetCode:94.BinaryTreeInorderTraversal(二叉树中序遍历)

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

相关文章:

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

题目描述: 


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

示例:

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

输出: [1,3,2]


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


文章目录:

题目描述: 

java实现方式1:

JAVA实现方式2: 

python实现方式1:

 python实现方式2:

github地址:


java实现方式1:

  递归形式遍历:

/**
     * 中序遍历二叉树
     *
     * @param root 根节点
     * @return 链表
     */
    public List inorderTraversal(TreeNode root) {
        List inorderList = new ArrayList<>();
        inorderHelper(inorderList, root);
        return inorderList;
    }

    /**
     * 递归帮助类
     *
     * @param inorderList 存储链表
     * @param root        根节点
     */
    public void inorderHelper(List inorderList, TreeNode root) {
        if (root == null) {
            return;
        }
        if (root.left != null) {
            inorderHelper(inorderList, root.left);
        }
        inorderList.add(root.val);
        if (root.right != null) {
            inorderHelper(inorderList, root.right);
        }
    }

时间复杂度:O(n)

空间复杂度:O(n) 


JAVA实现方式2: 

 /**
     * 中序遍历二叉树
     *
     * @param root 根节点
     * @return 链表
     */
    public List inorderTraversal2(TreeNode root) {
        List resultList = new ArrayList<>();
        Stack stack = new Stack<>();
        TreeNode p = root;
        while (p != null || !stack.isEmpty()) {
            if (p != null) {
                stack.push(p);
                p = p.left;
            } else {
                TreeNode node = stack.pop();
                resultList.add(node.val);
                p = node.right;
            }
        }
        return resultList;
    }

时间复杂度:O(n)

空间复杂度:O(n) 


python实现方式1:

def helper(res: List[int], root: TreeNode):
    '''
        中序遍历二叉树
    Args:
        res: 链表
        root: 根节点
    '''
    if root.left != None:
        helper(res, root.left)
    res.append(root.val)
    if root.right != None:
        helper(res, root.right)


def inorder_traversal1(root: TreeNode) -> List[int]:
    '''
        中序遍历二叉树
    Args:
        root: 跟节点
    Returns:
        中序递归遍历二叉树
    '''
    result = []
    if root == None:
        return result
    helper(result, root);
    return result

时间复杂度:O(n)

空间复杂度:O(n) 

 

 python实现方式2:

def inorder_traversal2(root: TreeNode) -> List[int]:
    '''
        中序遍历二叉树
    Args:
        root: 跟节点
    Returns:
        中序递归遍历二叉树
    '''
    result, stack = [], []
    while root or stack:
        if root:
            stack.append(root)
            root = root.left
        else:
            node = stack.pop()
            result.append(node.val)
            root = node.right
    return result

时间复杂度:O(n)

空间复杂度:O(n) 


github地址:

https://github.com/zhangyu345293721/leetcode

你可能感兴趣的:(java,leetcode)