文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。
相關文章:
- LeetCode:55. Jump Game(跳遠比賽)
- Leetcode:300. Longest Increasing Subsequence(最大增長序列)
- 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:
遞歸形式遍歷:
/**
* 中序遍歷二叉樹
*
* @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)