标签:put OLE 技术 strong new orm present split rsa
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
public static boolean isValidSerialization(String preorder) { Stack<String> st = new Stack<>(); String[] strs = preorder.split(","); for (int pos = 0; pos < strs.length; pos++) { String curr = strs[pos]; while (curr.equals("#") && !st.isEmpty() && st.peek().equals(curr)) { st.pop(); if (st.isEmpty()) { return false; } st.pop(); } st.push(curr); System.out.println(pos + "--->" + st.toString()); } return st.size() == 1 && st.peek().equals("#"); }
开始还不太明白,后来画个图就明白了。
遇到数字就push作为root,
遇到第一个#说明是个空,先push,
遇到第二个#说明不会继续往下走了,连续pop这两个#叶子,最后再把根pop出去用#作为新的根,表示这个根已经遍历完了。
等右子树全部遍历完,stack应该只剩下最顶的根和两个#叶子,继续用上面的方法pop掉#和根,再把#push进来,最后stack判断是不是#然后结束。
331. Verify Preorder Serialization of a Binary Tree
标签:put OLE 技术 strong new orm present split rsa
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11824055.html