“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!
13 个解决方案
#1
另外附上一些源代码
#include "stdio.h"
#include "malloc.h"
typedef int ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;
int InsertBiTree(BiTree &T,int e) //插入新结点
{
if(T==NULL){
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=e;
T->lchild=NULL;
T->rchild=NULL;
return 1;
}
if(T->data<e)
InsertBiTree(T->rchild,e);
else
InsertBiTree(T->lchild,e);
return 0;
}
BiTNode* FindNode( BiTree Ta,int i) //查找中序遍历序列中第i个结点。
{
。。。。。。
}
int main() //主函数
{
BiTree T=NULL;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}//main
#2
int main() //主函数
{
BiTree T=NULL, p;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
scanf("%d", &i);
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}main函数写欠了,不好意思
{
BiTree T=NULL, p;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
scanf("%d", &i);
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}main函数写欠了,不好意思
#3
中序就是从小到大排列 你放入一个数组 数组【i】 即可得到i节点
#4
你遍历的时候加个变量计数 等于i的时候你就取到这个数了、
#5
思路我知道,但我就是不能写出代码实现
#6
平时有没练习啊?作业贴吧!我帮你写写吧!
#7
???
#8
会中序遍历么?遍历的时候计数器等于i,返回节点的值就Ole ..
#9
void InOrderTraverse( BiTree T) //中序遍历二叉树
{
if(T==NULL) return ;
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
{
if(T==NULL) return ;
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
#10
楼主,我改了你的函数名了
BiTNode* node=NULL;//定义全局变量存找到第i个结点
int time=0; //记录查找次数
void FindNode( BiTree Ta,int i)
{
if(Ta==NULL)
return;
else
{
if(Ta->left!=NULL) FindNode(Ta->left,i);
if(++time==i) node=root; //中序放中间,前序放前面,后就放后面,把找到的存入node
if(Ta->right!=NULL) FindNode(Ta->right,i);
}
}
#11
那个root是什么啊
#12
我也在做楼主的题目,想了很久,始终都认为要加一个全局变量来记录遍历的数据,计数器或数组。
#13
学习了
#1
另外附上一些源代码
#include "stdio.h"
#include "malloc.h"
typedef int ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;
int InsertBiTree(BiTree &T,int e) //插入新结点
{
if(T==NULL){
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=e;
T->lchild=NULL;
T->rchild=NULL;
return 1;
}
if(T->data<e)
InsertBiTree(T->rchild,e);
else
InsertBiTree(T->lchild,e);
return 0;
}
BiTNode* FindNode( BiTree Ta,int i) //查找中序遍历序列中第i个结点。
{
。。。。。。
}
int main() //主函数
{
BiTree T=NULL;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}//main
#2
int main() //主函数
{
BiTree T=NULL, p;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
scanf("%d", &i);
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}main函数写欠了,不好意思
{
BiTree T=NULL, p;
int i,n,e;
scanf("%d",&n);//生成二叉排序树Ta
for(i=0;i<n;i++){
scanf("%d",&e);
InsertBiTree(T,e);
}
scanf("%d", &i);
p = FindNode(T, i);
if(p)
PrintElement(T ->data);
else
printf("Error");
printf("\n");
return 0;
}main函数写欠了,不好意思
#3
中序就是从小到大排列 你放入一个数组 数组【i】 即可得到i节点
#4
你遍历的时候加个变量计数 等于i的时候你就取到这个数了、
#5
思路我知道,但我就是不能写出代码实现
#6
平时有没练习啊?作业贴吧!我帮你写写吧!
#7
???
#8
会中序遍历么?遍历的时候计数器等于i,返回节点的值就Ole ..
#9
void InOrderTraverse( BiTree T) //中序遍历二叉树
{
if(T==NULL) return ;
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
{
if(T==NULL) return ;
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
#10
楼主,我改了你的函数名了
BiTNode* node=NULL;//定义全局变量存找到第i个结点
int time=0; //记录查找次数
void FindNode( BiTree Ta,int i)
{
if(Ta==NULL)
return;
else
{
if(Ta->left!=NULL) FindNode(Ta->left,i);
if(++time==i) node=root; //中序放中间,前序放前面,后就放后面,把找到的存入node
if(Ta->right!=NULL) FindNode(Ta->right,i);
}
}
#11
那个root是什么啊
#12
我也在做楼主的题目,想了很久,始终都认为要加一个全局变量来记录遍历的数据,计数器或数组。
#13
学习了