leetcode 二分搜尋樹

2021-08-17 16:54:28 字數 2360 閱讀 5359

二分搜尋樹勢一顆典型的二叉樹,二分搜尋樹根節點的值大於左孩子節點的值,小於右孩子節點的值,插入/刪除/查詢的時間複雜度都是log(n)

建立,插入

/**

* 思路:

* 首先初始化第乙個節點,然後第二個節點要插入樹中需要找到要插入位置的根節點,

* 有乙個查詢的過程,然後根據值的大小分別放在左右子樹

* @param a

* @param n

* @return

*/public static bst create(int a,int n) else if (searchnode.val < a[i])

}return root;

}public static bst search(bst root,int val)

if (val > root.val && root.right != null)

if (val < root.val && root.left != null)

return root;

}

刪除
/**

*思路:

*1.如果要刪除的節點是葉節點,找到要刪除節點的父親節點,直接刪除

*2.如果要刪除的節點只有左子樹,或者右子樹,父親節點指向孩子的左節點或者右節點

*3.如果要刪除的節點有左右子樹,找到刪除的節點的右子樹的最左節點,替換到該節點

*/ public static bst searchparent(bst root,int val)

if (root.left != null && root.val > val)

return searchparent(root.left,val);

}if (root.right != null && root.val < val)

return searchparent(root.right,val);

}return null;

}public static boolean deletenode(bst root,int val)

//找到要刪除的節點

bst deletenode = null;

boolean isleftchilde = false;

if (searchnode.left != null && searchnode.left.val == val)

if (searchnode.right != null && searchnode.right.val == val)

if (deletenode.left == null && deletenode.right == null) else

}else if (deletenode.left != null && deletenode.right == null) else

}else if (deletenode.left == null && deletenode.right != null) else

}else

return true;

}

/**

* 98. validate binary search tree

* 判定一棵樹是否是二分搜尋樹

* 思路:

* 二分搜尋樹的判定原則:

* 根節點》左子樹

* 根節點 《右子樹

* * 注意:遞迴的時候,有個隱含條件:

* 左子樹的右孩子節點是要小於根節點的

* 右子樹的左孩子節點是要大於根節點的

* @param root

* @return

public boolean isvalidbst(treenode root) 

public boolean isvalidbst(treenode root,integer max,integer min)

if (max != null && root.val > max)

if (min != null && root.val < min)

return isvalidbst(root.left,root.val,min) && isvalidbst(root.right,max,root.val);

}

public treenode lowestcommonancestor1(treenode root, treenode p, treenode q) 

//左子樹尋找

if (root.val > p.val && root.val >q.val)

if (root.val < p.val && root.val return root;

}

二分搜尋樹

1.二分搜尋樹 binary search tree 性質 a.二分搜尋樹是二叉樹 b.二分搜尋樹的每乙個節點的值 大於其左子樹的所有節點的值 小於其右子樹的所有節點的值 c.每一顆子樹也是二分搜尋樹 e.儲存的元素必須具有可比較性 二分搜尋樹的乙個缺點 2.二分搜尋樹的操作 a.二分搜尋樹新增新元...

二分搜尋樹

include include include include include using namespace std templateclass bst bst int size bool isempty 插入結點 void insert key key,value value 是否包含該鍵值的結...

二分搜尋樹

template class bst node root intcount public bst bst intsize bool isempty 插入新的節點 public void insert key key,value value private 向以node為根的二叉搜尋樹中,插入節點 k...