Verify Preorder Serialization of a Binary Tree
来源:互联网 发布:金山数据恢复下载 编辑:程序博客网 时间:2024/05/01 06:57
题目:
给定一棵二叉树的前序遍历序列,如 "9,3,4,#,#,1,#,#,2,#,6,#,#" ,# 代表空节点,判断是否是一个正确的二叉树前序遍历序列
提供两种解题思路,出度&入度, 栈
1. 出度& 入度
/* 这道题使用出度和入度来解决,对于以下节点来说: 非空节点: 出度 2, 入度 1 空节点: 出度 0, 入度 1 那么当我们建立一棵二叉树的时候,出度和入度之差 diff = 出度 - 入度 对于加入任何一个节点,diff - 1, 因为整体的树为它减少了一个入度。 当加入一个非空节点的时候,diff + 2, 因为它提供了两个出度。 那么当树是正确的时候,diff的值应该为非负。如果为正确的树的时候, diff == 0 */ public boolean isValidSerialization(String preorder) { String[] nodes = preorder.split(","); int diff = 1; for (int i = 0; i < nodes.length; ++i) { //先减入度,再加出度 if (--diff < 0) { return false; } if (!"#".equals(nodes[i])) { diff += 2; } } return diff == 0; }
2. 栈
/* 已例子一为例,:”9,3,4,#,#,1,#,#,2,#,6,#,#” 遇到x # #的时候,就把它变为 # 模拟一遍过程: 9,3,4,#,# => 9,3,# 继续读 9,3,#,1,#,# => 9,3,#,# => 9,# 继续读 9,#2,#,6,#,# => 9,#,2,#,# => 9,#,# => # 栈中最后一个元素为 # 的时候结果一定是true */ public boolean isValidSerialization(String preorder) { String[] nodes = preorder.split(","); ArrayList<String> stack = new ArrayList<String>(); for (int i = 0; i < nodes.length; ++i) { stack.add(nodes[i]); while (stack.size() >= 3 && stack.get(stack.size() - 1 ).equals("#") && stack.get(stack.size() - 2 ).equals("#") && !stack.get(stack.size() - 3 ).equals("#")) { stack.remove(stack.size() - 1); stack.remove(stack.size() - 1); stack.remove(stack.size() - 1); stack.add("#"); } } if( stack.size() == 1 && stack.get(0).equals("#")) return true; else return false; }
--------------EOF---------------
0 0
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- Verify Preorder Serialization of a Binary Tree
- leetcode Verify Preorder Serialization of a Binary Tree
- 331. Verify Preorder Serialization of a Binary Tree
- Leetcode: Verify Preorder Serialization of a Binary Tree
- LeetCode Verify Preorder Serialization of a Binary Tree
- leetcode 331. Verify Preorder Serialization of a Binary Tree
- [LeetCode]331. Verify Preorder Serialization of a Binary Tree
- 331. Verify Preorder Serialization of a Binary Tree
- [leetcode] Verify Preorder Serialization of a Binary Tree
- jquery获取循环输出的对象
- js/jquery去掉空格,回车,换行示例代码
- oracle函数大全-字符串处理函数
- Java判断素数
- java线程 CyclicBarrier
- Verify Preorder Serialization of a Binary Tree
- SSH-Hibernate(二)—映射关系(下)
- android 用命令为未签名apk签名
- java学习日记_99:线程的设置优先级和常用方法
- 第十四周 项目1-(2)验证分块查找算法
- spring面试题
- android不知不觉偷拍他人功能实现(手机关闭依然拍照)
- java查漏补缺
- java方法中传入(Object... strs)参数