思路:
从根节点开始,如果根节点为空则返回NULL,如果根节点值大于val,那就往左子树上找,否则去右子树上找
问号表达式真好用
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
} TreeNode,*SearchTree,*Position;
void PreOrderTraversal(SearchTree T)
{
if(T==NULL)
return;
cout<<T->val<<" ";
PreOrderTraversal(T->left);
PreOrderTraversal(T->right);
}
SearchTree Insert(int val,SearchTree T)
{
if(T==NULL)
{
T = (SearchTree)malloc(sizeof(TreeNode));
if(T==NULL)
{
cout<<"MALLOC ERROR\n"<<endl;
exit(1);
}
T->val = val;
T->left = T->right = NULL;
}
else
{
if(val>T->val)
T->right = Insert(val,T->right);
else if(val<T->val)
T->left = Insert(val,T->left);
}
return T;
}
class Solution
{
public:
TreeNode* searchBST(TreeNode* root, int val)
{
if(root==NULL)
return NULL;
if(root->val == val)
return root;
else
return root->val>val ?
searchBST(root->left,val):searchBST(root->right,val);
}
};
int main()
{
Solution s;
SearchTree T1 = NULL;
SearchTree T2 = NULL;
T1 = Insert(3,T1);
T1 = Insert(9,T1);
T1 = Insert(20,T1);
T1 = Insert(15,T1);
T1 = Insert(7,T1);
// T1 = Insert(6,T1);
// T1 = Insert(9,T1);
PreOrderTraversal(T1);
cout<<endl;
T2 = s.searchBST(T1,9);
cout<<T2->val<<endl;
return 0;
}