摘要:指的是的位置。算法比較簡單,算法比較難想,可是原題都說了
preorder: root-left-right
inorder: left-root-right
postorder: left-right-root
order指的是root的位置。
recursive算法比較簡單,iterative算法比較難想,可是leetcode原題都說了: recursive method is trivial, could you do iteration?
144.Binary Tree Preorder Traversal/*iterative*/ public List94.Binary Tree Inorder TraversalpreorderTraversal(TreeNode root) { List result = new LinkedList<>(); if(root == null) return result; Stack stack = new Stack<>(); stack.push(root); TreeNode n = root; while(!stack.isEmpty()){ n = stack.pop(); result.add(n.val); if(n.right!= null) stack.push(n.right); if(n.left != null) stack.push(n.left); } return result; } /*recursive*/ public List preorderTraversal(TreeNode root) { List result = new LinkedList<>(); preHelper(root,result); return result; } private void preHelper(TreeNode n, List result){ if(n == null) return; result.add(n.val); if(n.left != null) preHelper(n.left,result); if(n.right!= null) preHelper(n.right,result); }
/*iterative*/ public ListinorderTraversal(TreeNode root) { List result = new LinkedList<>(); TreeNode curr =root; Stack stack = new Stack<>(); while(curr!=null || !stack.isEmpty()){ while(curr!=null){ stack.push(curr); curr = curr.left; } curr = stack.pop(); result.add(curr.val); curr = curr.right; } return result; }
/* recursive*/ public List145.Binary Tree Postorder TraversalinorderTraversal(TreeNode root) { List result = new LinkedList<>(); inHelper(root,result); return result; } private void inHelper(TreeNode n, List result){ if(n == null) return; if(n.left!=null) inHelper(n.left,result); result.add(n.val); if(n.right != null) inHelper(n.right,result); }
/*iterative*/ public ListpostorderTraversal(TreeNode root) { LinkedList result = new LinkedList<>(); if(root == null) return result; TreeNode curr = root; Stack stack = new Stack<>(); stack.push(root); while(!stack.isEmpty()){ curr = stack.pop(); result.addFirst(curr.val); if(curr.left != null) stack.push(curr.left); if(curr.right != null) stack.push(curr.right); } return result; }
/*recursive*/ public ListpostorderTraversal(TreeNode root) { List result = new LinkedList<>(); postHelper(root,result); return result; } private void postHelper(TreeNode n, List result){ if(n == null) return; if(n.left != null) postHelper(n.left,result); if(n.right!= null) postHelper(n.right,result); result.add(n.val); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66117.html
摘要:樹是計算機科學中經常用到的一種數據結構數是一種非線性的數據結構以分層的方式存儲數據數被用來存儲具有層級關系的數據比如文件系統中的文件樹還被用來存儲有序列表本章將研究一種特殊的樹二叉樹選擇樹而不是那些基本的數據結構是因為在二叉樹上進行查找非常 樹是計算機科學中經常用到的一種數據結構. 數是一種非線性的數據結構, 以分層的方式存儲數據. 數被用來存儲具有層級關系的數據, 比如文件系統中的文...
摘要:判斷兩棵樹是否是相同題目要求傳入兩棵樹的根節點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。定義樹的一種自然方式是遞歸的方式。一棵樹是一些節點的集合,這個集合可以是空集。這個遍歷算法可以用于場景如,計算一個節點的高度。 判斷兩棵樹是否是相同 題目要求:傳入兩棵樹的根節點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。一旦我們解決了這個問題,題目也就迎刃而解了。下面就來介紹一下 關...
閱讀 997·2023-04-25 14:41
閱讀 2454·2021-09-28 09:35
閱讀 3624·2019-08-30 15:53
閱讀 1944·2019-08-29 15:26
閱讀 1070·2019-08-28 17:59
閱讀 4310·2019-08-26 13:45
閱讀 2840·2019-08-26 13:33
閱讀 1645·2019-08-26 11:46