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