摘要:如果我們從右往左看先序遍歷,就知道后兩個節點如果遇到第三個節點,則該節點就應當是這兩個節點的父節點。如果在遍歷的過程中根節點數量小于,則說明這棵樹有問題。而如果遍歷結束之后,剩下的根節點數不等于,也說明這個先序遍歷存在問題。
題目要求
One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node"s value. If it is a null node, we record using a sentinel value such as #. _9_ / 3 2 / / 4 1 # 6 / / / # # # # # # For example, the above binary tree can be serialized to the string "9,3,4,#,#,1,#,#,2,#,6,#,#", where # represents a null node. Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree. Each comma separated value in the string must be either an integer or a character "#" representing null pointer. You may assume that the input format is always valid, for example it could never contain two consecutive commas such as "1,,3". Example 1: Input: "9,3,4,#,#,1,#,#,2,#,6,#,#" Output: true Example 2: Input: "1,#" Output: false Example 3: Input: "9,#,#,1" Output: false思路和代碼
我們知道,任何兩個節點都可以和位于左邊的非葉節點構成一棵有三個節點的樹。如果我們從右往左看先序遍歷,就知道后兩個節點如果遇到第三個節點,則該節點就應當是這兩個節點的父節點。我們可以將每一個#看做一個根節點,每遇到#就將記錄的根節點數加一,當遇到數字時,則代表該數字應當能夠和兩個節點構成新的樹,并且該數字成為新的根節點,因此需要將根節點數量減一。如果在遍歷的過程中根節點數量小于1,則說明這棵樹有問題。而如果遍歷結束之后,剩下的根節點數不等于1,也說明這個先序遍歷存在問題。
public boolean isValidSerialization(String preorder) { if(preorder==null) return false; if(preorder.length() == 0) return true; String[] nodes = preorder.split(","); int nodeCount = 0; for(int i = nodes.length - 1; i >= 0 ; i--) { if(nodes[i].equals("#")) { nodeCount++; } else { nodeCount--; } if(nodeCount <= 0) return false; } return nodeCount == 1; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72418.html
摘要:如果它是一個空節點,我們可以使用一個標記值記錄,例如。例如,上面的二叉樹可以被序列化為字符串,其中代表一個空節點。每個以逗號分隔的字符或為一個整數或為一個表示指針的。如果滿足前序遍歷,那么最后棧中有且僅有一個元素,且是。 Description One way to serialize a binary tree is to use pre-order traversal. When ...
摘要:令,那么從累加會一直保持正,最后為。從左往右比較好理解,因為總是總到左再到右,的總是的,所以一定是保持。注意從開始,因為沒有。 Verify Preorder Serialization of a Binary Tree 題目鏈接:https://leetcode.com/problems... recursion,用個全局的index: public class Solution {...
摘要:題目要求將二叉搜索樹序列化和反序列化,序列化是指將樹用字符串的形式表示,反序列化是指將字符串形式的樹還原成原來的樣子。假如二叉搜索樹的節點較多,該算法將會占用大量的額外空間。 題目要求 Serialization is the process of converting a data structure or object into a sequence of bits so that...
摘要:如果繼續降序,說明又向左走了,這樣等到下次向右走得時候也要再次更新最小值。這樣,序列無效的條件就是違反了這個最小值的限定。我們同樣可以用本題的方法解,不過是從數組的后面向前面遍歷,因為在后面了。棧的增長方向也是從高向低了。 Verify Preorder Sequence in Binary Search Tree Given an array of numbers, verify ...
摘要:思路理論上說所有遍歷的方法都可以。但是為了使和的過程都盡量最簡單,是不錯的選擇。用作為分隔符,來表示。復雜度代碼思路這道題和之前不同,一般的樹變成了,而且要求是。還是可以用,還是需要分隔符,但是就不需要保存了。 297. Serialize and Deserialize Binary Tree Serialization is the process of converting a...
閱讀 1677·2023-04-26 00:30
閱讀 3150·2021-11-25 09:43
閱讀 2877·2021-11-22 14:56
閱讀 3187·2021-11-04 16:15
閱讀 1148·2021-09-07 09:58
閱讀 2021·2019-08-29 13:14
閱讀 3110·2019-08-29 12:55
閱讀 987·2019-08-29 10:57