实际上跟我上一篇博文重了,这篇多加了查找
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; typedef struct node { struct node *leftchild; struct node *rightchild; char data; } bitreenode,*bitree; void createTree(bitree &T) { char ch; cin>>ch; if(ch=='#')T=NULL; else { T=new node; T->data=ch; createTree(T->leftchild); createTree(T->rightchild); } } void preTraverse(bitree &T) { if(T==NULL)return ; cout<<T->data; preTraverse(T->leftchild); preTraverse(T->rightchild); } void intraverse(bitree &T) { if(T==NULL)return ; intraverse(T->leftchild); cout<<T->data; intraverse(T->rightchild); } void posttraverse(bitree &T) { if(T==NULL)return ; posttraverse(T->leftchild); posttraverse(T->rightchild); cout<<T->data; } node* TreeFindNode(bitree &treeNode,char data)//二叉树的查找 { node *ptr;//这里可以换成bool类型或者int类型的,也就是说返回值不一定要用指针,这仅仅是个标志而已 if(treeNode==NULL) { return NULL; } else { if(treeNode->data==data) { return treeNode; } else //分别向左右子树查找 { if(ptr=TreeFindNode(treeNode->leftchild,data)) //左子树递归查找 { return ptr; } else if(ptr=TreeFindNode(treeNode->rightchild,data)) //右子树递归查找 { return ptr; } else { return NULL; } } } } //比如像下面这样 /* int TreeFindNode(bitree &treeNode,char data)//二叉树的查找 { if(treeNode==NULL) { return 0; } else { if(treeNode->data==data) { return 1; } else //分别向左右子树查找 { if(TreeFindNode(treeNode->leftchild,data)) //左子树递归查找 { return 1; } else if(TreeFindNode(treeNode->rightchild,data)) //右子树递归查找 { return 1; } else { return 0; } } } }*/ int main() { int i,j,k; node *T; createTree(T); cout<<endl; preTraverse(T); cout<<endl; intraverse(T); cout<<endl; posttraverse(T); if(TreeFindNode(T,'X')!=NULL)printf(" YES "); else printf(" NO "); return 0; } /* AB#D##C#E## */