给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Solution { List<Integer> list = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { inorder03(root); return list; }
public void inorder01(TreeNode root){ if(root==null) return; inorder01(root.left); list.add(root.val); inorder01(root.right); }
public void inorder02(TreeNode root){ if(root==null) return; Stack<TreeNode> st = new Stack<>(); while(root!=null||!st.isEmpty()){ while(root!=null){ st.push(root); root = root.left; } root = st.pop(); list.add(root.val); root = root.right; } }
public void inorder03(TreeNode root){ if(root==null) return; Stack<TreeNode> st = new Stack<>(); st.push(root); while(!st.isEmpty()){ TreeNode node = st.pop(); if(node!=null){ if(node.right!=null) st.push(node.right); st.push(node); st.push(null); if(node.left!=null) st.push(node.left); }else{ node = st.pop(); list.add(node.val); } } } }
|