zoukankan      html  css  js  c++  java
  • G面经Prepare: Valid Preorder traversal serialized String

    1 求问下各位大神,怎么判断一个按照Preorder traversal serialized的binary tree的序列是否正确呢?不能deserialize成树比如
    2 A) 9 3 4 # # 1 # # 2 # 6 # #是对的,因为表示
    3            9
    4          /   
    5        3      2
    6       /        
    7     4    1      6    
    8 B ) 9 3 4 # # 1 # #就是错的,因为无法反构造回一棵树

    我觉得可以在字符串里找"n##"这种结构(对应tree里两个children都是Null的叶节点),找到之后就把"n##"改写成"#",也就是把找到的那个末端的子树想想成null,最后字符串变成"#"的就是valid,否则就invalid
    比如 A) 9 3 "4 # #" "1 # #" 2 # "6 # #" ---> 9 3 # # 2 # # ---> 9 "3 # #" "2 # #" ---> 9 # # ---> "9 # #" ---> "#"
           B) 9 3 "4 # #" "1 # #" ---> 9 3 # # ---> 9 "3 # #" ---> 9 # (没有"n##"结构了,return false)

    也可用stack来这样做,当前如果是#,stack peek如果也是#且size>=2,就pop两次,且再check当前这个#

     1 package PreorderValidSerialized;
     2 import java.util.*;
     3 
     4 public class Solution {
     5     public boolean check(String str) {
     6         String[] strs = str.split(" ");
     7         Stack<String> stack = new Stack<String>();
     8         for (int i=0; i<strs.length; i++) {
     9             if (stack.size()>=2 && strs[i].equals("#") && stack.peek().equals("#")) {
    10                 stack.pop();
    11                 stack.pop();
    12                 i--;
    13             }
    14             else stack.push(strs[i]);
    15         }
    16         if (stack.size()==1 && stack.peek().equals("#")) return true;
    17         else return false;
    18     }
    19 
    20     /**
    21      * @param args
    22      */
    23     public static void main(String[] args) {
    24         // TODO Auto-generated method stub
    25         Solution sol = new Solution();
    26         boolean res = sol.check("9 3 4 # # 1 # # 2 # 6 # # #");
    27         if (res) System.out.println("true");
    28         else System.out.println("false");
    29     }
    30 
    31 }
  • 相关阅读:
    常见面试测试要点
    怎样在 CentOS/RHEL 7/6 上安装和配置 Sendmail 服务器
    Cannot uninstall 'pyparsing'. It is a distutils installed project
    Linux下校验SHA1和MD5的方法
    Linux查看进程启动时间和运行多长时间
    sqlplus -S参数表示什么意思?
    dnspython模块报错 AttributeError: 'CNAME' object has no attribute 'address'
    CentOS7中安装pip的方法
    四则运算中遇到的一个问题
    动手动脑
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5138501.html
Copyright © 2011-2022 走看看