LeetCode编程训练 – 二叉查找树(Binary Search Tree)

2019-06-03 14:52 by bangerlee, 阅读, 评论, 收藏, 编辑

二叉查找树基础

二叉查找树(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  题解

449. Serialize and Deserialize BST  题解

 

二叉查找树前序遍历

若对二叉查找树进行前序遍历(preorder),也将得到满足一定规则的序列 [根节点val, 左子树, 右子树],两者也可以相互构造。

 

相关LeetCode题:

255. Verify Preorder Sequence in Binary Search Tree  题解

1008. Construct Binary Search Tree from Preorder Traversal  题解

 

版权声明:本文为bangerlee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bangerlee/p/10967563.html