二叉搜索树的性质:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
两道力扣题:①查找二叉搜索树中的某个根节点。②在二叉搜索树中插入某个结点
题目①leedcode700:
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
示例 2:
输入:root = [4,2,7,1,3], val = 5输出:[ ]
这道题有两个解法:
法一(普通):
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* searchBST(struct TreeNode* root, int val){
while(root){
if(val<root->val){
root=root->left;
}
else if(val==root->val){
return root;
}
else{
root=root->right;
}
}
return NULL;
}
法二(递归):
struct TreeNode* searchBST(struct TreeNode* root, int val){
if(root==NULL){
return NULL;
}
if(root->val==val){
return root;
}
else{
return searchBST(root->val<val?root->right:root->left,val);
}
}
题目②leedcode701:
这道题可以借第一题的法一 一样的思路去写:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* create(int val){
struct TreeNode* ret;
ret=(struct TreeNode*)malloc(sizeof(struct TreeNode));
ret->val=val;
ret->left=ret->right=NULL;
return ret;
}
struct TreeNode* insertIntoBST(struct TreeNode* root, int val){
if(root==NULL){
root=create(val);
return root;
}
struct TreeNode* pos=root;
while(pos){
if(val<pos->val){
if(pos->left==NULL){
pos->left=create(val);
break;
}
else{
pos=pos->left;
}
}
else{
if(pos->right==NULL){
pos->right=create(val);
break;
}
else{
pos=pos->right;
}
}
}
return root;
}