94. 二叉樹的中序遍歷
給定一個二叉樹的根節點?root
?,返回?它的?中序?遍歷?。
示例 1:
輸入:root = [1,null,2,3] 輸出:[1,3,2]
示例 2:
輸入:root = [] 輸出:[]
示例 3:
輸入:root = [1] 輸出:[1]
經典老題:兩種實現思路? 遞歸或棧
1.遞歸? 先一直向左邊找,然后res添加,最后向右找。
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();inorder(root, res);return res;}void inorder(TreeNode root, List<Integer> res) {if (root == null) {return;}inorder(root.left, res);list.add(root.val); inorder(root.right, res);}
}
2.棧? while--->左邊,然后res添加,在換到右邊。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();if(root == null){return res;}Stack<TreeNode> st = new Stack<>();TreeNode cur = root;while(cur!=null||!st.isEmpty()){if(cur!=null){st.push(cur);cur= cur.left;}else{TreeNode node1 = st.pop();res.add(node1.val);cur = node1.right;}}return res;}
}
感謝你看到這里,喜歡的可以點點關注哦!