日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

94 Binary Tree Inorder Traversal

發布時間:2024/4/14 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 94 Binary Tree Inorder Traversal 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸的代碼是以前數據結構書上常見的:

public ArrayList<Integer> inorderTraversal(ConstructBinaryTreefromPostorderandInorderTraversal.TreeNode root) {ArrayList<Integer> res = new ArrayList<>();dfs(res, root);return res;}private void dfs(List<Integer> res, ConstructBinaryTreefromPostorderandInorderTraversal.TreeNode node) {if (node == null) return;dfs(res, node.left);res.add(node.val);dfs(res, node.right);} 復制代碼

非遞歸用stack模擬中序遍歷,要理解啊,不能死記硬背。注意while條件和while里面的if。

public class Solution {public ArrayList<Integer> inorderTraversal(TreeNode root) {ArrayList<Integer> res = new ArrayList<>();LinkedList<TreeNode> stack = new LinkedList<>();//注意while條件是或while (root != null || !stack.isEmpty()){if (root!=null){stack.push(root);root = root.left;}else {root = stack.pop();res.add(root.val);root = root.right;}}return res;} } 復制代碼

MAR 25TH 這題今天做98. Validate Binary Search Tree 的時候又來復習了一遍,又忘的差不多了。。記得當時還在考慮為什么while里面要用||而不是&&。

這題還可以這樣寫:

public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();if(root == null) return list;Stack<TreeNode> stack = new Stack<>();while(root != null || !stack.empty()){while(root != null){stack.push(root);root = root.left;}root = stack.pop();list.add(root.val);root = root.right;}return list; } 復制代碼

JULY 29 REVIEW

又看了一遍迭代的方法,仍然寫不出。。上面那個代碼,兩個while循環其實挺清晰的,但是root = root.right那邊還是挺難想到的。還有就是外層的while,兩種情況;1是root!= null的情況,這種比較好考慮,就是首次進入的時候;2是root==null的情況,statck不為空,這種就是dfs到棧最底的情況。

轉載于:https://juejin.im/post/5a3132fef265da432d281a4b

總結

以上是生活随笔為你收集整理的94 Binary Tree Inorder Traversal的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。