题目大意:判断二叉树一个数是否为一颗排序二叉树。
解题思路:方法有多种,可以先对二叉树进行中序遍历,然后检查得到的遍历结果是否是升序。不过这样做除了遍历二叉树需要的栈以外还需要一个数值来存储遍历结果以及在此遍历结点元素。有一种方法也是利用中序遍历的思想,用一个变量存储上一个结点的值,在每访问一个结点时,判断当前结点的值是否大于上一结点的值。如果成立,则继续遍历二叉树,如果不成立,则返回false。
Java代码:
<span style="font-size:14px;">/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isValidBST(TreeNode root) {
long preVal = Long.valueOf(Integer.MIN_VALUE) - 1; // 根节点前一个“元素的”初始值,方式根节点的值为Integer.MIN_VALUE
List<TreeNode> list = new ArrayList<TreeNode>();
while (list.size()!=0 || root!=null) {
while (root != null) {
list.add(root);
root = root.left;
}
if (root == null) {
root = list.get(list.size() - 1);
if (preVal < root.val) { // 判断是否升序
preVal = root.val;
root = root.right;
list.remove(list.size() - 1);
} else
return false;
}
}
return true;
}
}</span>