算法與數據結構基礎 - 二叉查找樹(Binary Search Tree)

二叉查找樹基礎css

二叉查找樹(BST)知足這樣的性質,或是一顆空樹;或左子樹節點值小於根節點值、右子樹節點值大於根節點值,左右子樹也分別知足這個性質。node

利用這個性質,能夠迭代(iterative)或遞歸(recursive)地用O(lgN)的時間複雜度在二叉查找樹中進行值查找。git

 

相關LeetCode題:github

700. Search in a Binary Search Tree  題解框架

701. Insert into a Binary Search Tree  題解spa

450. Delete Node in a BST  題解3d

776. Split BST  題解code

 

二叉查找樹與有序序列blog

由性質可知,若是按中序(inorder)遍歷二叉查找樹,咱們將獲得遞增序列;反過來,若是中序遍歷的結果不是遞增序列,則所遍歷樹不是二叉查找樹。如下框架適用於多數須要中序遍歷二叉樹的場景:遞歸

//98. Validate Binary Search Tree
    bool isValidBST(TreeNode* root) { stack<TreeNode*> st; TreeNode* prv=NULL; while(root!=NULL||!st.empty()){ while(root!=NULL){ st.push(root); root=root->left; } root=st.top(); st.pop(); if(prv!=NULL&&prv->val>=root->val) return false; prv=root; root=root->right; } return true; }

二叉查找樹能夠生成有序序列,一樣能夠用有序序列構造二叉查找樹:遞歸地以中間值爲root,左側爲左子樹、右側爲右子樹。

 

相關LeetCode題:

98. Validate Binary Search Tree  題解

173. Binary Search Tree Iterator  題解

230. Kth Smallest Element in a BST  題解

108. Convert Sorted Array to Binary Search Tree  題解

449. Serialize and Deserialize BST  題解

 

二叉查找樹前序遍歷

若對二叉查找樹進行前序遍歷(preorder),也將獲得知足必定規則的序列 [根節點val, 左子樹, 右子樹],二者也能夠相互構造。

 

相關LeetCode題:

255. Verify Preorder Sequence in Binary Search Tree  題解

1008. Construct Binary Search Tree from Preorder Traversal  題解

相關文章
相關標籤/搜索