查找二叉树中序遍历序列中第i个结点

编程点滴 2011-10-21 09:52:41
请问各位前辈和老师,如何查找二叉树中序遍历序列中第i个结点,要求写成函数,这是函数声明
“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!
...全文
640 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
潘多拉星系 2011-10-29
  • 打赏
  • 举报
回复
学习了
nissanquest 2011-10-29
  • 打赏
  • 举报
回复
我也在做楼主的题目,想了很久,始终都认为要加一个全局变量来记录遍历的数据,计数器或数组。
编程点滴 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 w835369950 的回复:]
楼主,我改了你的函数名了

C/C++ code

BiTNode* node=NULL;//定义全局变量存找到第i个结点
int time=0; //记录查找次数
void FindNode( BiTree Ta,int i)
{
if(Ta==NULL)
return;
else
{
if(Ta->le……
[/Quote]
那个root是什么啊
meixin2009 2011-10-22
  • 打赏
  • 举报
回复
???
w835369950 2011-10-22
  • 打赏
  • 举报
回复
平时有没练习啊?作业贴吧!我帮你写写吧!
w835369950 2011-10-22
  • 打赏
  • 举报
回复
楼主,我改了你的函数名了
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);
}
}
编程点滴 2011-10-22
  • 打赏
  • 举报
回复
思路我知道,但我就是不能写出代码实现
编程点滴 2011-10-22
  • 打赏
  • 举报
回复
void InOrderTraverse( BiTree T) //中序遍历二叉树
{
if(T==NULL) return ;
InOrderTraverse(T->lchild);
printf("%d ", T->data);
InOrderTraverse(T->rchild);
}
ohmygirl 2011-10-22
  • 打赏
  • 举报
回复
会中序遍历么?遍历的时候计数器等于i,返回节点的值就Ole ..
编程点滴 2011-10-21
  • 打赏
  • 举报
回复
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函数写欠了,不好意思
编程点滴 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhongxianyao 的回复:]
请问各位前辈和老师,如何查找二叉树中序遍历序列中第i个结点,要求写成函数,这是函数声明
“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!
[/Quote]
另外附上一些源代码
#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
Indifferent_Wind 2011-10-21
  • 打赏
  • 举报
回复
你遍历的时候加个变量计数 等于i的时候你就取到这个数了、
liu_chengwu 2011-10-21
  • 打赏
  • 举报
回复
中序就是从小到大排列 你放入一个数组 数组【i】 即可得到i节点

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧