算法-二叉树:在二叉搜索树中寻找节点
确定一个节点是否在二叉搜索树中,如果在,则返回这个节点,如果不在,则返回NULL。树中没有重复元素。
方法一:递归
TreeNode* searchNode(TreeNode* root,int target){
if(root == NULL || root->val == target) return root;
if(target < root->val){
return searchNode(root->left, target);//注意这里时是return,因为这里的递归不需要遍历整棵树,找到值返回就行
}
if(target > root->val){
return searchNode(root->right, target);
}
return NULL;
}
方法二:基于二叉搜索树的有序性,不需要深度遍历或者层序遍历就可以写出迭代策略。
TreeNode* searchNode(TreeNode* root,int target){
if(root == NULL || root->val == target) return root;
while (!root) {
if(target < root->val){
root = root->left;
}
else if(target > root->val){
root = root->right;
}
else{
return root;
}
}
return NULL;
}