求助!!!求二叉树某一节点的双亲的程序怎么改啊?
#include<stdio.h>#include<stdlib.h>
typedef int DataType;
typedef struct Node
{
DataType data;
struct Node * Lchild;
struct Node * Rchild;
}BiTNode,*BiTree;
BiTNode *CreateBiTree()
{
BiTree s;
char ch;
ch=getchar();
if(ch=='#')
return NULL;
else
{ s=(BiTNode *)malloc(sizeof(BiTNode));
s->data=ch;
s->Lchild=CreateBiTree();
s->Rchild=CreateBiTree();
return s;
}
}
void Visit(BiTree root)
{
if(root)
printf("%c",root->data);
}
void PreOrder(BiTree root)//先序
{
if(root)
{
Visit(root);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root)//中序
{
if(root)
{
InOrder(root->Lchild);
Visit(root);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root)//后序
{
if(root)
{
PostOrder(root->Lchild);
PostOrder(root->Rchild);
Visit(root);
}
}
void PreOrderroot(BiTree root)//输出二叉树中结点
{
if(root)
{
PreOrderroot(root->Lchild);
PreOrderroot(root->Rchild);
printf("%c",root->data);
}}
int preorderroot(BiTree root)//统计二叉树节点数
{ int count,a1,a2;
if(root==NULL)
count=0;
else if((root->Lchild==NULL)||(root->Rchild==NULL))
count=2;
else
{
a1=preorderroot(root->Lchild);a1++;
a2=preorderroot(root->Rchild);a2++;
count=a1+a2;
}
return count;
}
void InOrderroot(BiTree root)//输出二叉树叶子结点
{
if(root)
{
InOrderroot(root->Lchild);
if(root->Lchild==NULL && root->Rchild==NULL)
printf("%c",root->data);
InOrderroot(root->Rchild);
}
}
int leaf(BiTree root)//统计叶子结点数
{
int count1,n1,n2;
if(root==NULL)
count1=0;
else if((root->Lchild==NULL)&&(root->Rchild==NULL))
count1=1;
else
{
n1=leaf(root->Lchild);
n2=leaf(root->Rchild);
count1=n1+n2;
}
return count1;
}
int PostTreeDepth(BiTree root)//求二叉树的高度
{
int h1,h2,h;
if(root)
{
h1=PostTreeDepth(root->Lchild);
h2=PostTreeDepth(root->Rchild);
h=(h1>h2?h1:h2)+1;
return h;
}
else
return 0;
}
BiTree Parent(BiTree root,BiTree x)//求结点的双亲
{
BiTree p,q;
if(root==NULL)
return NULL;
if((root->Lchild&&root->Lchild==x)||(root->Rchild&&root->Rchild==x))
printf("%c",root->data);
return root;
}
void PrintTree(BiTree root,int h)
{
if(root==NULL)
return;
PrintTree(root->Rchild,h+1);
for(int i=0;i<h;i++)
printf(" ");
printf("%3c\n",root->data);
PrintTree(root->Lchild,h+1);
}
void main()
{
BiTree root;
BiTree s,o,x,p;
int h,count1,t;
printf("按先序输入二叉树:\n");
s=CreateBiTree();
root=s;
printf("按先序输出:");
PreOrder(root);
printf("\n");
printf("按中序输出:");
InOrder(root);
printf("\n");
printf("按后序输出:");
PostOrder(root);
printf("\n");
printf("输出二叉树中的节点:");
PreOrderroot(root);
printf("\n");
printf("输出二叉树中的节点数:");
t=preorderroot(root);
printf("%d\n",t);
printf("输出二叉树中叶子结点:");
InOrderroot(root);
printf("\n");
printf("输出叶子结点数:");
count1=leaf(root);
printf("%d\n",count1);
printf("二叉树的高度:");
h=PostTreeDepth(root);
printf("%d\n",h);
printf("打印:\n");
PrintTree(root,h);
printf("输入要求双亲的节点:");
BiTree Parent(BiTree root,BiTree x);
printf("\n");
}