实际上跟我上一篇博文重了,这篇多加了查找
#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("\nYES\n");
else printf("\nNO\n");
return 0;
}
/*
AB#D##C#E##
*/