94.Binary Tree Inorder Traversal---二叉樹中序非遞歸遍歷

題目連接ide

題目大意:中序遍歷二叉樹。先序見144,後序見145。spa

法一:DFS,沒啥說的,就是模板DFS。代碼以下(耗時1ms):code

 1     public List<Integer> inorderTraversal(TreeNode root) {
 2         List<Integer> res = new ArrayList<Integer>();
 3         dfs(res, root);
 4         return res;
 5     }
 6     private void dfs(List<Integer> res, TreeNode root) {
 7         if(root != null) {
 8             dfs(res, root.left);
 9             res.add(root.val);
10             dfs(res, root.right);
11         }
12     }
View Code

法二:非遞歸。與先序相似。代碼以下(耗時2ms):blog

 1     public List<Integer> inorderTraversal(TreeNode root) {
 2         Stack<TreeNode> s = new Stack<TreeNode>();
 3         List<Integer> res = new ArrayList<Integer>();
 4         TreeNode tmp = root;
 5         while(!s.isEmpty() || tmp != null) {
 6             //壓入左孩子結點
 7             while(tmp != null) {
 8                 s.push(tmp);
 9                 tmp = tmp.left;
10             }
11             //若是棧非空,彈出頂結點,遍歷右子樹
12             if(!s.isEmpty()) {
13                 tmp = s.pop();
14                 res.add(tmp.val);
15                 tmp = tmp.right;
16             }
17         }
18         return res;
19     }
View Code
相關文章
相關標籤/搜索