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

时间:2022-12-17 12:57:25
请问各位前辈和老师,如何查找二叉树中序遍历序列中第i个结点,要求写成函数,这是函数声明
“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!

13 个解决方案

#1


引用楼主 zhongxianyao 的回复:
请问各位前辈和老师,如何查找二叉树中序遍历序列中第i个结点,要求写成函数,这是函数声明
“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!

另外附上一些源代码
#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函数写欠了,不好意思

#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);
}

#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


引用 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……

那个root是什么啊

#12


我也在做楼主的题目,想了很久,始终都认为要加一个全局变量来记录遍历的数据,计数器或数组。

#13


学习了

#1


引用楼主 zhongxianyao 的回复:
请问各位前辈和老师,如何查找二叉树中序遍历序列中第i个结点,要求写成函数,这是函数声明
“BiTNode* FindNode( BiTree Ta,int i);//i表示二叉树中序遍历序列中的第i个结点”,麻烦了!!!!

另外附上一些源代码
#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函数写欠了,不好意思

#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);
}

#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


引用 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……

那个root是什么啊

#12


我也在做楼主的题目,想了很久,始终都认为要加一个全局变量来记录遍历的数据,计数器或数组。

#13


学习了