二叉搜索樹開始部分——驗證二叉搜索樹(附帶介紹)
1.什麼是二叉搜索樹
1.二叉搜索樹是一種二叉樹的特殊形式
2.二叉搜索樹根據插入節點值的大小決定節點向右子樹移動還是向左子樹移動
每個節點中的值必須大於存儲在其左側子樹中的任何值。
每個節點中的值必須小於存儲在其右子樹中的任何值。
3.二叉搜索樹節點的值一定是可比的
4.二叉搜索樹中可以(一般不建議存在重複元素)不存在重複值(可以用它來實現map和set)
下面是一個二叉搜索樹的例子:
2.今天我來講講怎樣驗證一個二叉搜索樹
首先二叉搜索樹有個特性即它的中序遍歷爲一個遞增的有序序列那麼我們就可以利用這個特性來驗證二叉搜索樹,我們只要判斷list.get(i-1)>list.get(i)就可以判斷不是二叉搜索樹,如果循環完畢則是二叉搜索樹,這裏list是中序遍歷結果
我們直接上代碼:
class Solution {
public boolean isValidBST(TreeNode root) {
List<Integer> list=new ArrayList<>();//存儲中序遍歷結果
inOrder(root,list);
for(int i=0;i<list.size()-1;i++){
if(list.get(i)>=list.get(i+1)){//如果前者大於後者則不是二叉搜索樹
return false;
}
}
return true;//循環完畢是二叉搜索樹
}
//中序遍歷
public void inOrder(TreeNode root,List<Integer> list){
if(root==null){
return ;
}
inOrder(root.left,list);
list.add(root.val);
inOrder(root.right,list);
}
}