摘要:令,那么從累加會一直保持正,最后為。從左往右比較好理解,因為總是總到左再到右,的總是的,所以一定是保持。注意從開始,因為沒有。
Verify Preorder Serialization of a Binary Tree
題目鏈接:https://leetcode.com/problems...
recursion,用個全局的index:
public class Solution { public boolean isValidSerialization(String preorder) { if(preorder == null || preorder.length() == 0) return false; String[] tree = preorder.split(","); if(tree.length == 1) return tree[0].equals("#"); return dfs(tree) && tree.length == index; } int index = 0; private boolean dfs(String[] tree) { // start from root if(index >= tree.length) return false; if(tree[index].equals("#")) { index++; return true; } index++; return dfs(tree) && dfs(tree); } }
iteration:
public class Solution { public boolean isValidSerialization(String preorder) { if(preorder == null || preorder.length() == 0) return false; // iteration, add the node Stackstack = new Stack(); for(String s : preorder.split(",")) { // check 2 "#" if(s.equals("#")) { while(!stack.isEmpty() && stack.peek().equals("#")) { // pop "#" stack.pop(); if(stack.isEmpty()) return false; // pop parent of "#" & "#" stack.pop(); } } stack.push(s); } return stack.size() == 1 && stack.peek().equals("#"); } }
看到discussion還有一種用入度出度的方法,比較厲害,不用額外空間:
除了根節點和葉子節點之外,每個節點都有2個出度(left,right)和1個入度,根節點非空有2個出度0個入度,葉子節點有1個入度。令diff = outdegree - indegree,那么從累加diff會一直保持正,最后為0。從左往右比較好理解,因為preorder總是總root到左再到右,root的diff總是>0的,所以一定是保持positive。從右往左就不知道怎么理解了。。注意diff從1開始,因為root沒有indegree。
public class Solution { public boolean isValidSerialization(String preorder) { int diff = 1; for(String s : preorder.split(",")) { if(--diff < 0) return false; if(!s.equals("#")) diff += 2; } return diff == 0; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66598.html
摘要:如果我們從右往左看先序遍歷,就知道后兩個節點如果遇到第三個節點,則該節點就應當是這兩個節點的父節點。如果在遍歷的過程中根節點數量小于,則說明這棵樹有問題。而如果遍歷結束之后,剩下的根節點數不等于,也說明這個先序遍歷存在問題。 題目要求 One way to serialize a binary tree is to use pre-order traversal. When we en...
摘要:如果它是一個空節點,我們可以使用一個標記值記錄,例如。例如,上面的二叉樹可以被序列化為字符串,其中代表一個空節點。每個以逗號分隔的字符或為一個整數或為一個表示指針的。如果滿足前序遍歷,那么最后棧中有且僅有一個元素,且是。 Description One way to serialize a binary tree is to use pre-order traversal. When ...
摘要:思路理論上說所有遍歷的方法都可以。但是為了使和的過程都盡量最簡單,是不錯的選擇。用作為分隔符,來表示。復雜度代碼思路這道題和之前不同,一般的樹變成了,而且要求是。還是可以用,還是需要分隔符,但是就不需要保存了。 297. Serialize and Deserialize Binary Tree Serialization is the process of converting a...
摘要:如果繼續降序,說明又向左走了,這樣等到下次向右走得時候也要再次更新最小值。這樣,序列無效的條件就是違反了這個最小值的限定。我們同樣可以用本題的方法解,不過是從數組的后面向前面遍歷,因為在后面了。棧的增長方向也是從高向低了。 Verify Preorder Sequence in Binary Search Tree Given an array of numbers, verify ...
摘要:題目要求將二叉搜索樹序列化和反序列化,序列化是指將樹用字符串的形式表示,反序列化是指將字符串形式的樹還原成原來的樣子。假如二叉搜索樹的節點較多,該算法將會占用大量的額外空間。 題目要求 Serialization is the process of converting a data structure or object into a sequence of bits so that...
閱讀 3650·2021-10-12 10:11
閱讀 1013·2021-09-22 15:42
閱讀 3465·2019-08-30 13:06
閱讀 907·2019-08-29 17:05
閱讀 1651·2019-08-29 12:21
閱讀 2378·2019-08-29 11:31
閱讀 1136·2019-08-23 18:37
閱讀 1257·2019-08-23 14:58