FTPrep, 98 Validate Binary Search Tree
来源:互联网 发布:java语言的执行模式 编辑:程序博客网 时间:2024/06/06 04:20
这道题拿到手里,最直接的方法就是 inorder遍历,生成一个list,然后挨个检查看是不是增序排列。
思路是这样的,但是考虑到,可以在存表的时候就检查了两两相邻元素,而不需要全部存好再检查。再 进一步优化,其实不需要存整个list呀,因为如果所有相邻的两两元素都满足条件那就okay了。所以只需要一个 其他 变量来维护就okay了。
代码的套路,就是来自于 iterative inorder traversal,这是一个模版,在这个模版上微微一变,就可以了。
而且这个模版适用至少3题: 94,inorder traversal; 98, validate binary search tree; 230, K-th smallest element.( 哥uber实习第二面的题哦,哈哈,看来我当时做题还不够多,不过反应还可以做出来了)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isValidBST(TreeNode root) { if(root==null) return true; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode pre = null; // int preVal=Integer.MIN_VALUE; 事实证明这样是不过不了所有case的,卡住的case就是node.val==Integer.MIN_VALUE // 所以还是把pre定义成 TreeNode, 初始值为null,这样就容易处理啦,加一个判断条件。 while(root!=null || !stack.isEmpty()){ if(root!=null){ stack.push(root); root=root.left; }else{ root=stack.pop(); if(pre!=null && pre.val>=root.val) return false; pre=root; root=root.right; } } return true; }}// 可以看出这道题的本质做法就是inorder遍历呀~哈哈,但是其实又不需要全部排开存到一个list,虽然我一开始最简单想法就是先存起来再遍历检查大小关系// 现在的话只需要有一个 变量 来维护之前的数,也就是stack.pop() 出来的数,这样空间上可以节约大量空间。
把230的代码先帖到这里,供对比:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int kthSmallest(TreeNode root, int k) { int result=0; int order=0; if(root==null) return -1; Stack<TreeNode> stack = new Stack<TreeNode>(); while(root!=null || !stack.isEmpty()){ if(root!=null){ stack.push(root); root=root.left; } else{ root=stack.pop(); result=root.val; order++; if(order==k) return result; root=root.right; } } return result; }}
阅读全文
0 0
- FTPrep, 98 Validate Binary Search Tree
- 98Validate Binary Search Tree
- 98 Validate Binary Search Tree
- 98 Validate Binary Search Tree
- 98 Validate Binary Search Tree
- 98 Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- iOS lldb调试Chisel增强插件安装过程
- leetcode 006 ZigZag Conversion
- 23种设计模式之二
- 学做Ubuntu内核 *.deb包
- 语义识别(一):隐性马尔可夫模型
- FTPrep, 98 Validate Binary Search Tree
- javaWeb-servlet的执行流程详解
- SSH工程整理
- 重温JSP的来龙去脉
- SVM -支持向量机原理与实践之实践篇
- bzoj 2306: [Ctsc2011]幸福路径
- 【Android】Error[*,*]Could not find method android() for arguments [……]
- bitset用法小结
- opencv-python(4):用滑动条作调色板