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<Integer> inorderTraversal(TreeNode root) {
        List<Integer> inorderList = new ArrayList<>();
        inorderHelper(inorderList, root);
        return inorderList;
    }

    /**
     * 遞歸幫助類
     *
     * @param inorderList 存儲鏈表
     * @param root        根節點
     */
    public void inorderHelper(List<Integer> 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<Integer> inorderTraversal2(TreeNode root) {
        List<Integer> resultList = new ArrayList<>();
        Stack<TreeNode> 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章