/**
* 非递归的中序遍历实现
* @param root
* @return
*/publicstaticbooleanisSearchTreeByIn(TreeNode root){if(root ==null){returntrue;}Stack<TreeNode> stack =newStack<>();Integer pre =null;TreeNode cur = root;while(!stack.isEmpty()|| cur !=null){if(cur !=null){
stack.push(cur);
cur = cur.left;}else{
cur = stack.pop();if(pre !=null&& pre > cur.value){returnfalse;}
pre = cur.value;
cur = cur.right;}}returntrue;}
2.2 二叉树的递归套路
publicstaticclassInfo{publicboolean isSBT;publicint max;publicint min;publicInfo(boolean isSBT,int max,int min){this.isSBT = isSBT;this.max = max;this.min = min;}}publicstaticbooleanisSBT(TreeNode root){if(root ==null){returntrue;}returnprocess(root).isSBT;}publicstaticInfoprocess(TreeNode node){if(node ==null){returnnull;}Info leftInfo =process(node.left);Info rightInfo =process(node.right);//先把最小值最大值设置为当前节点的值,如果左右子树不为null则可以更新int max = node.value;int min = node.value;boolean isSBT =true;if(leftInfo !=null){
max =Math.max(max,leftInfo.max);
min =Math.max(min,leftInfo.min);
isSBT &= leftInfo.isSBT;}if(rightInfo !=null){
max =Math.max(max,rightInfo.max);
min =Math.max(min,rightInfo.min);
isSBT &= rightInfo.isSBT;}if(leftInfo !=null&& leftInfo.max >= node.value){
isSBT &=false;}if(rightInfo !=null&& rightInfo.min <= node.value){
isSBT &=false;}returnnewInfo(isSBT,max,min);}