编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值

编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
static int n=0;
typedef struct tree
{
struct tree *left;
int date;
struct tree *right;
}treenode,*b_tree;
///////插入节点/////////////////////

b_tree insert(b_tree root,int node)
{
b_tree newnode;
b_tree currentnode;
b_tree parentnode;

newnode=(b_tree)malloc(sizeof(treenode));

newnode->date=node;
newnode->right=NULL;
newnode->left=NULL;

if(root==NULL)
return newnode;
else
{
currentnode=root;
while(currentnode!=NULL)
{
parentnode=currentnode;
if(currentnode->date>node)
currentnode=currentnode->left;
else
currentnode=currentnode->right;
}
if(parentnode->date>node)
parentnode->left=newnode;
else
parentnode->right=newnode;
}
return root;
}

//////建立树///////////////////
b_tree creat(int *date,int len)
{
b_tree root=NULL;
int i;
for(i=0;i<len;i++)
root=insert(root,date[i]);
return root;
}

//////前序打印第K个数////////////////
void print3(b_tree root,int k)
{
if(root!=NULL)
{ n++;
if(n==k)
printf("%d\n",root->date);
print3(root->left,k);
print3(root->right,k);

}
}

//////前序打印////////////////
void print(b_tree root)
{
if(root!=NULL)
{

printf("%d->",root->date);
print(root->left);
print(root->right);

}
}
///////测试函数//////////////////
void main()
{
b_tree root=NULL;
int i,index;
int value;
int nodelist[20];

cout<<"输入树的节点,输入0结束\n";
index=0;
cin>>value;
while(value!=0)
{
nodelist[index]=value;
index=index+1;
cin>>value;
}
root=creat(nodelist,index);
printf("\n前序打印\n");
print(root);
printf("\n打印问位置数\n");
cin>>i;
printf("\n前序打印第K个数\n");

print3(root,i); }
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-07-02
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
static
int
n=0;
typedef
struct
tree
{
struct
tree
*left;
int
date;
struct
tree
*right;
}treenode,*b_tree;
///////插入节点/////////////////////
b_tree
insert(b_tree
root,int
node)
{
b_tree
newnode;
b_tree
currentnode;
b_tree
parentnode;
newnode=(b_tree)malloc(sizeof(treenode));
newnode->date=node;
newnode->right=NULL;
newnode->left=NULL;
if(root==NULL)
return
newnode;
else
{
currentnode=root;
while(currentnode!=NULL)
{
parentnode=currentnode;
if(currentnode->date>node)
currentnode=currentnode->left;
else
currentnode=currentnode->right;
}
if(parentnode->date>node)
parentnode->left=newnode;
else
parentnode->right=newnode;
}
return
root;
}
//////建立树///////////////////
b_tree
creat(int
*date,int
len)
{
b_tree
root=NULL;
int
i;
for(i=0;i<len;i++)
root=insert(root,date[i]);
return
root;
}
//////前序打印第K个数////////////////
void
print3(b_tree
root,int
k)
{
if(root!=NULL)
{
n++;
if(n==k)
printf("%d
",root->date);
print3(root->left,k);
print3(root->right,k);
}
}
//////前序打印////////////////
void
print(b_tree
root)
{
if(root!=NULL)
{
printf("%d->",root->date);
print(root->left);
print(root->right);
}
}
///////测试函数//////////////////
void
main()
{
b_tree
root=NULL;
int
i,index;
int
value;
int
nodelist[20];
cout<<"输入树的节点,输入0结束
";
index=0;
cin>>value;
while(value!=0)
{
nodelist[index]=value;
index=index+1;
cin>>value;
}
root=creat(nodelist,index);
printf("
前序打印
");
print(root);
printf("
打印问位置数
");
cin>>i;
printf("
前序打印第K个数
");
print3(root,i);
}

1编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值(写出算...
使用先序遍历二叉树的算法即可解决,只需要修改输出结点值的方法即可。输出方法修改为计数方式,计数到第K次输出是才进行真实输出即可,例如:bool print(TreeNode *node, int &curTime, int k ){ curTime++;if (curTime == k){ printf("%c", node->value);return true;} return false;} \/\/...

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,输出其先序...
include "stdio.h"include "malloc.h"define ELEMTYPE char BiTNode *bulid() \/*建树*\/ { BiTNode *q;BiTNode *s[20];int i,j;char x;printf("请按顺序输入二叉树的结点以输入0和*号结束\\n");printf("请输入要输入的为第几个结点i=\\n");scanf("%d",&i);printf("请输入你要输入该结...

用递归算法先序中序后序遍历二叉树
1、先序 void PreOrderTraversal(BinTree BT){ if( BT ){ printf(“%d\\n”, BT->Data); \/\/对节点做些访问比如打印 PreOrderTraversal(BT->Left); \/\/访问左儿子 PreOrderTraversal(BT->Right); \/\/访问右儿子 } } 2、中序 void InOrderTraversal(BinTree BT){ if(BT){ InOrde...

求数据结构二叉树查找结点及其父节点的代码,谢谢!!!
void build_tree(int rt,int &num){\/\/构建二叉树 if(a[num]==0){\/\/a[num]==0,表示空结点 tree[rt].v=-1;} else { if(mp.count(a[num])==0)mp[a[num]]=rt;\/\/储存a[num]在树中的位置 tree[rt].v=a[num];\/\/结点赋值 num++;build_tree(2*rt,num);\/\/左孩子 num++;b...

写一个算法,交换一棵二叉树T的左右子树,要求使左子树根结点的关键字k小...
\/\/递归算法(更像伪代码)void swap(BT root){ if(root){ if(root.l&&root.r&&(*root.l).key>(*root.r).key){ BT p=(*root).l;(*root).l=(*root).r;(*root).r=p;} swap((*root).l);swap((*root).r);} }

编写一个递归算法,统计并返回以BT为树根指针的二叉树中的叶子结点的个...
当x左右子树为空 f(x)=1;其他 f(x)=f(bt->lchild)+f(bt-rchild)--- int Count(BTreeNode *BT){ int l,r;if(BT==NULL) return 0;else if(BT->Lchild==NULL&&BT->Rchild==NULL) return 1;else { l=Count(BT->Lchild);r=Count(BT->Rchild);return (l+r);} } ...

构造一棵二叉树,并分别输出其先序遍历、中序遍历和后序遍历的结果
"<<endl;CreateBiTree(T);cout<<"二叉树的先序遍历为:"<<endl;preBiTree(T);cout<<endl;cout<<"二叉树的中序遍历为:"<<endl;InBiTree(T);cout<<endl;cout<<"二叉树的后序遍历为:"<<endl;PostBiTree(T);cout<<endl;cout<<"二叉树的深度为:"<<endl;cout<<Depth(T)<<endl;} ...

设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个...
int search(char ino[],char pre)\/\/在中序序列中查找先序中该元素所在位置 { int i=0;while(ino[i]!=pre&&ino[i])i++;if(ino[i]==pre)return i;else return -1;} void CrtBT(BitTree &T,char pre[],char ino[],int ps,int is,int n)\/*递归算法构造函数,建立二叉链表*\/ {...

一棵二叉树的先序、中序、后序序列分别如下,其中有一部分未显示出来。试...
中序最后多了个Q吧 根据二叉树遍历的性质可以逐步填满其中空格并还原二叉树如下:先序:ABDFKICEHJG 中序:DBKFIAHEJCG 后序:DKIFBHJEGCA

编写算法:已知二叉排序树按二叉链表形式存储,树中结点各不相同,欲得...
首先看下二叉排序树的定义:二叉排序树(Binary Sort Tree)又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、...

相似回答