搜索二叉樹
一棵樹上任何一個節點,左子樹的值都比節點本身值小,右節點都比節點本身值大.
二叉樹的中序遍歷節點值是依次升序的就是搜索二叉樹.通常搜索二叉樹中不會出現重複節點.
利用遞歸函數會訪問每個節點三次的特性,先收集左樹信息再收集右樹信息,然後比較是否符合規定.
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;
}
}