更多"试编写一个非递归算法.实现求以二叉链表存储的二叉树中q结点的祖先。"的相关试题:
[简答题]以二叉链表作为存储结构,试编写递归算法实现求二叉树中叶子结点个数。
[简答题]已知深度为h的二叉树采用顺序存储结构已存放于数组BT[1:2h一1]中,请写一非递归算法,产生该二叉树的二叉链表结构。设二叉链表中链结点的构造为(lchild,data,rchild),根结点所在链结点的指针由T给出。
[单项选择]实现任意二叉树的后序遍历的非递归算法用栈结构,最佳方案是二叉树采用()存储结构。
A. 二叉链表
B. 顺序存储结构
C. 三又链表
D. 广义表存储结构
[简答题]要求二叉树按二叉链表形式存储,并且:
(1)写一个建立二叉树的算法。
(2)写一个判别给定的二叉树是否是完全二叉树的算法。完全二叉树定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二叉树中编号从1至N的结点一一对应。
[填空题][说明] 假设二叉树采用链式存储方式存储,编写一个后序遍历二叉树的非递归方式。
Void postorder (btree * B)
btree * stack [m0] , *p;
int tag [m0], top =0;
p=b;
do
while (p! =NULL)
top+ +;
(1)
tag [top] =0;
p =p- >left;
if (top >0)
(2)
if (tag[top3 = =1)
(3)
print ("%d", p- >data);
if(top>0)
(4)
tag [top] = 1;
while (p! = NULL && top ! =0)
[填空题][说明] 假设二叉树采用链式存储方式存储,编写一个后序遍历二叉树的非递归方式。
Void postorder (btree * B)
{
btree * stack [m0] , *p;
int tag [m0], top =0;
p=b;
do
{
while (p! =NULL)
{
top+ +;
(1)
tag [top] =0;
p =p- >left;
}
if (top >0)
{
(2)
if (tag[top3 = =1)
{
(3)
print ("%d", p- >data);
}
if(top>0)
{
(4)
tag [top] = 1;
}
}
} while (p! = NULL && top ! =0)
}
[简答题]【说明】
本程序利用非递归算法实现二叉树后序遍历。
【函数】
#include<stdio.h>
#include<stdlib.h>
typedef struct node{/*二叉树的结点数据结构类型*/
char data;
struct node *left;
struct node *right;
}BTREE;
void SortTreelnsert(BTREE **tree, BTREE *s)
{
if(*tree==NULL)*tree=s;
else
if(s->data<(*tree)->data)
SortTreelnsert( (1) ,s);
else if(s->data>=(*tree)->data)
SortTreelnsert( (2) ,s);
}
void TraversalTree(BTREE *tree)
{
BTREE *stack[1 000],*p;
int tag[1000],top=0;
p=tree;
do{
while(p !=NULL)
{
stack[++top]=p;
(3) ;
tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/
}
while(top>0&& (4) )/*栈顶结点的右子树是否被后序遍历过*/
{
p=stack[top--];
putchar(p->data);
}
if(top>0)/*对栈顶结点的右子树进行后序遍历*/
{
(5) ;
tag[top]=1;
}
}while(top>0);
}
void PrintSortTree(BTREE *tree)
{
if(tree !=NULL)
{
printSortTree(tree->left);
[简答题]【说明】
本程序利用非递归算法实现二叉树后序遍历。
【函数】
#include<stdio.h>
#include<stdlib.h>
typedef struct node/*二叉树的结点数据结构类型*/
char data;
struct node *left;
struct node *right;
BTREE;
void SortTreelnsert(BTREE **tree, BTREE *s)
if(*tree==NULL)*tree=s;
else
if(s->data<(*tree)->data)
SortTreelnsert( (1) ,s);
else if(s->data>=(*tree)->data)
SortTreelnsert( (2) ,s);
void TraversalTree(BTREE *tree)
BTREE *stack[1 000],*p;
int tag[1000],top=0;
p=tree;
do
while(p !=NULL)
stack[++top]=p;
(3) ;
tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/
while(top>0&& (4) )/*栈顶结点的右子树是否被后序遍历过*/
p=stack[top--];
putchar(p->data);
if(top>0)/*对栈顶结点的右子树进行后序遍历*/
(5) ;
tag[top]=1;
while(
[单项选择]将一个递归算法改为对应的非递归算法时,通常需要使用______。
A. 栈
B. 队列
C. 循环队列
D. 优先队列
[简答题]已知二叉树采用二叉链表方式存放,要求返回二叉树T的后序序列中的第一个结点的指针,是否可不用递归,且不用栈来完成请简述原因。
[简答题]以二叉链表作为存储结构,试编写求二叉树中叶子数的算法。
[简答题]二叉链表为存储结构,写出二叉树宽度的算法。所谓宽度,是指二叉树的各层上,具有结点数最多的那一层上的结点总数。
[多项选择]假设二叉树采用二叉链表存储结构存储,试设计一个算法,求出该二叉树中第一条最长的路径长度以及此路径上个结点的值。
[简答题]给定一棵用二叉链表表示的二叉树,其中的指针t指向根结点,试写出从根开始,按层次遍历二叉树的算法,同层的结点按从左至右的次序访问。
[填空题]【说明】
下面的程序构造一棵以二叉链表为存储结构的二叉树算法。
【函数】
BTCHINALR *createbt ( BTCHINALR *bt )
BTCHINALR *q;
struct node1 *s [30];
int j,i;
char x;
printf ( "i,x =" ); scanf ( "%d,%c",&i,&x );
while (i!=0 && x!=’$’)
q = ( BTCHINALR* malloc ( sizeof ( BTCHINALR )); //生成一个结点
(1) ;
q->1child = NULL;
q->rchild = NULL;
(2) ;
if( (3) ;)
j=i/2 //j为i的双亲结点
if(i%2==0
(4) //i为j的左孩子
else
(5) //i为j的右孩子
printf ( "i,x =" ); scanf ( "%d,%c",&i,&x );
return s[1]