如题,利用递归在二叉树中查找一个值,若二叉树中存在该值则输出1,否则输出0.我想用遍历进行查找,但是却无法进行,代码如下:
#include
#include
#include
#include
using namespace std;
class Tree_Node {
public:
char data; //数据
Tree_Node *left;
Tree_Node *right;
Tree_Node(char da) {
left = right = NULL;
data = da;
}
};
//删除二叉树 内联函数 减少时间花销
inline void free_Tree(Tree_Node *p) {
if(p -> left != NULL) {
free_Tree(p -> left);
}
if(p -> right != NULL){
free_Tree(p -> right);
}
delete(p);
}
void post_order(Tree_Node *p) {
if(p) {
post_order(p -> left);
post_order(p -> right);
cout << p -> data;
}
}
bool search(Tree_Node *p, char k) {
if(p -> data == k) {
return true;
}
if(p) {
search(p -> left, k);
search(p -> right, k);
}
}
void build_Tree(Tree_Node &p, string a) {
char ch;
int index = 0;
stack <Tree_Node> s;
// stack s2;
ch = a[index++];
while(ch != '\0'){
p = new Tree_Node(ch);
if(s.size() > 0) {
p -> left = s.top();
s.pop();
}
s.push(p);
ch = a[index++];
if(ch == '\0') {
break;
}
if(ch != '\0' && s.top() -> left == NULL) {
p = s.top();
s.pop();
p -> left = new Tree_Node(ch);
ch = a[index++];
s.push(p);
}
if(ch == '\0') {
break;
}
if(ch != '\0') {
p = s.top();
s.pop();
p -> right = new Tree_Node(ch);
s.push(p);
ch = a[index++];
s.push(p);
}
if(ch == '\0') {
break;
}
}
p = s.top();
s.pop();
}
int main() {
string s;
char c;
Tree_Node *tree;
cin >> s >> c;
build_Tree(tree, s);
post_order(tree);
cout << endl;
if(search(tree, c)) {
cout << 1 << endl;
}
else {
cout << 0 << endl;
}
cout << 1 << endl;
free_Tree(tree);
return 0;
}
还有一个问题是不知道失败的判定条件,请大神帮帮忙修改一下代码