LeetCode 94 二叉樹中序遍歷
阿新 • • 發佈:2020-08-19
LeetCode 94 二叉樹中序遍歷
題目描述:給定一個二叉樹,返回它的中序遍歷。
執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
記憶體消耗:38.2 MB, 在所有 Java 提交中擊敗了14.07%的使用者
遞迴
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); dfs(root, result); return result; } public void dfs(TreeNode root, List<Integer> inorderTraversal) { if(root==null) { return; } else{ //左、根、右 dfs(root.left, inorderTraversal); inorderTraversal.add(root.val); dfs(root.right, inorderTraversal); } return; } }
非遞迴: 使用棧
- 對於某個非空根節點,將其入棧
- 若根節點左子節點不為空,重複1步驟;否則進入3步驟
- 因為左子節點為空(無左子樹/訪問完畢),因此將棧頂根節點彈出並訪問
- 若根節點有子節點不為空,重複1步驟;否則重複3步驟
執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
記憶體消耗:38 MB, 在所有 Java 提交中擊敗了44.37%的使用者
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); //使用棧進行非遞迴形式遍歷 List<TreeNode> stack = new ArrayList<TreeNode>(); TreeNode node = root; while(!stack.isEmpty() || node!=null){ if(node!=null) { stack.add(node); node = node.left; } else if(node==null) { node = stack.get(stack.size()-1); result.add(node.val); stack.remove(stack.size()-1); node = node.right; } } return result; } }