搜索二叉树
一棵树上任何一个节点,左子树的值都比节点本身值小,右节点都比节点本身值大.
二叉树的中序遍历节点值是依次升序的就是搜索二叉树.通常搜索二叉树中不会出现重复节点.
利用递归函数会访问每个节点三次的特性,先收集左树信息再收集右树信息,然后比较是否符合规定.
1-设计返回结构
返回结构需要包含当前节点是否符合左节点比自己小右节点比自己大的信息,还要包含当前节点的值.结构如下:
class Res{
int data;
boolean isC;
Res(int data, boolean isC){
this.data = data;
this.isC = isC;
}
}
2-设计递归逻辑如下
public class PrintTree {
public static Res isBinarySearchTree(Node head){
//1-给定的节点是空,直接返回
if(head == null){
return new Res(-1,false);
}
//创建本轮次返回结构等待返回
Res curRes = new Res(head.data,true);
//收集左子树信息
if(head.left != null){
Res leftRes = isBinarySearchTree(head.left);
if(leftRes.data > head.data){
curRes.isC = false;
}
}
//收集右子树信息
if(head.right != null){
Res rightRes = isBinarySearchTree(head.right);
if(rightRes.data < head.data){
curRes.isC = false;
}
}
//返回本轮次结果
return curRes;
}
}