1. 程式人生 > >LeetCode程式設計訓練 - 二叉查詢樹(Binary Search Tree)

LeetCode程式設計訓練 - 二叉查詢樹(Binary Search Tree)

二叉查詢樹基礎

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

利用這個性質,可以迭代(iterative)或遞迴(recursive)地用O(lgN)的時間複雜度在二叉查詢樹中進行值查詢。

 

相關LeetCode題:

700. Search in a Binary Search Tree  題解

701. Insert into a Binary Search Tree  題解

450. Delete Node in a BST  題解

776. Split BST  題解

 

二叉查詢樹與有序序列

由性質可知,如果按中序(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  題解

426. Convert Binary Search Tree to Sorted Doubly Linked List  題解

449. Serialize and Deserialize BST  題解

 

二叉查詢樹前序遍歷

若對二叉查詢樹進行前序遍歷(preorder),也將得到滿足一定規則的序列 [根節點val, 左子樹, 右子樹],兩者也可以相互構造。

 

相關LeetCode題:

255. Verify Preorder Sequence in Binary Search Tree  題解

1008. Construct Binary Search Tree from Preorder Traversal  題解

&n