import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
public boolean isValidBST (TreeNode root) {
// write code here
boolean reslut = true;
TreeNode start = root;
while(start.left != null){ //获取双向链表的头结点
start = start.left;
}
midOrder(root);//中序遍历,重组双向链表,val满足升序排序,则是二叉树搜索树,左节点值都小于右节点值
TreeNode temp = start;
while(temp.right != null){//利用指针遍历双向列表,如出当前值大于right值,则不满足二叉树搜索树的规则
if(temp.val > temp.right.val){
reslut = false;
break;
}
temp = temp.right;
}
return reslut;
}
TreeNode pointer = null;
private void midOrder(TreeNode target){
if(target == null) return;
midOrder(target.left);
target.left = pointer;
if(pointer != null){
pointer.right = target;
}
pointer = target;//指针后移
midOrder(target.right);
}
}