一道数据结构,完全二叉树的题目,求助!

2024-05-20 02:45

1. 一道数据结构,完全二叉树的题目,求助!

应该是B
只有一种情况,层数才可能是8即:
第七层全部排满(64个节点)
第八层只有一个节点
总共的叶子节点就为7层的63个+八层的1个;
没有公式,按完全二叉树的性质推论下就知道。 
原来你对定义不熟悉:
(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的节点都连续集中在最左边,这就是完全二叉树。 
(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。

一道数据结构,完全二叉树的题目,求助!

2. 一道数据结构,完全二叉树的题目,求助!

设根节点的深度为1。从上到下的个数依次为1/2/4/8……,每层最多有叶子节点的个数为2的(i-1)次方,i 为深度。这里的n=64,因此,64=2的(i-1)方,所以i=7。 但是,由于是完全二叉树,因此可以在第八层里有1个叶子节点(最多只能有一个),第八层的那个叶子节点将第七层的覆盖。故可能达到的最大深度为8。

3. 一道数据结构,完全二叉树的题目,求助!

应该是B
只有一种情况,层数才可能是8即:
第七层全部排满(64个节点)
第八层只有一个节点
总共的叶子节点就为7层的63个+八层的1个;
没有公式,按完全二叉树的性质推论下就知道。
原来你对定义不熟悉:
(1)完全二叉树——若设二叉树的高度为h,除第
h
层外,其它各层
(1~h-1)
的结点数都达到最大个数,第
h
层所有的节点都连续集中在最左边,这就是完全二叉树。
(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。

一道数据结构,完全二叉树的题目,求助!

4. c语言二叉树问题,勿写代码,求详细思考过程

后序遍历:若树不空,则先依次后根遍历各棵子树,然后访问根结点。(先左后右)
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。
从后序遍历:CDABE得出E是最顶根节点。
然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。
再分析后序遍历CDA可以知道A是CD的根,
而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)
最后,先序遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。
于是得到结束: 先序遍历是 EACDB
 
 
 
 

5. C语言 数据结构 二叉树实现的疑问

首先敬仰一下楼主的勤奋!

我主要针对第二个算法说,我觉得上面这段话也是在讲第二个算法。其实两个算法差不太多。
1. 栈顶记录中的指针其实就是指栈顶,每次push()进去或者pop()出来的那个p。他代表的是正在访问的节点得下一个节点。比如,访问一个树t的左子树t->lchild时,栈顶就是t;访问t->lchild->lchild时,栈顶就是t->lchild。访问t->rchild时,栈顶为NULL;访问t->lchild->rchild时,栈顶为t;访问t->rchild->lchild时,栈顶也是t;访问t->rchild->rcchild时,栈顶仍为NULL。他的意义就是,在访问完了当前的子树之后,就会去访问栈顶记录的指针对应的节点的数据。
2. 关于“工作记录”那个词,我觉得还是别深究了。那段话意思是要仿照编译器把递归编译成迭代的思路来自己写迭代算法,可是实际上后面给出的算法里根本没有严格执行上述思路,写出来的算法并不是严格意义上的可以一般性替换递归的迭代算法。所以追究那个词也没意义,明白迭代遍历的算法怎么用就够了。等以后对递归有了更深刻的认识,自然就明白了。其实就是函数递归调用自身之前像中断那样保存自己的工作环境和进度。
3. (2)句并不矛盾。他说“指针为空时”和“指针指向的xxx”中间不是有句“退回上一层”么,那就表示pop(),于是原来那个在栈顶的空指针弹出去了,原来在第二位的指针现在到了栈顶。于是后面那句指的是对这个指针进行操作。
另外,虚机团上产品团购,超级便宜

C语言 数据结构 二叉树实现的疑问

6. 数据结构中2叉树的问题~~

根据二叉树的递归定义的特点(简单地说就是二叉树的子树都是二叉树);综合先序和中序序列可以逐步得到整个二叉树。
1)先序序列:IJKLMNO可知,根结点是I
再结合中序JLKINMO可知:左子树是:JLK;右子树:NMO
2)左子树的根(看先序序列是JKL)是J,也是I的左孩子;
    右子树的根(看先序序列是MNO)是M,也是I的右孩子;
3)同理左子树的左子树为空(中序序列JLK,J的左边为空),右子树是LK;
右子树的左子树为N(中序序列NMO),右子树是O;
以此类推,可以得到整个二叉树

7. 关于二叉树的一道C编程题,请各位高手帮忙写个完整代码。

楼主你好!
这是我的思路:
a,b)说明 根结点<左结点<右结点
c)说明这是一棵除了最后一层不满其余层全满的完全二叉树
我觉得a,b的条件可以有很多种解决方法,这里用最简单的办法.就是按每一层的从小到大排序.
因此,第一步先将数组排序(快速排序,插入排序.....任何一种) nlgn内搞定.
第二步,就是完全二叉树的插入法.完全二叉树插入法可以用水平遍历的办法的扩展,这里不细说.
第三步,统计叶子节点值和输出叶子节点值(这个太简单,只需要输出left和right都为空的结点即可.)
完整代码:
排序步骤忽略.
#include#includeusing namespace std;struct node{	int value;	node* left;	node* right;	node(int val):value(val),left(NULL),right(NULL){}};struct Tree{	node* root;	Tree():root(NULL){}};node* HorizInsert(node* root,node* z){	if(!root)	{		root=z;		return root;	}	queue q;	q.push(root);	while(!q.empty())	{		node* Front=q.front();		q.pop();		if(Front->left==NULL)		{			Front->left=z;			return root;		}		if(Front->right==NULL)		{			Front->right=z;			return root;		}		if(Front->left)			q.push(Front->left);		if(Front->right)			q.push(Front->right);	}	return root;}void HorizPrint(node* root){	if(!root) return ;	queue q;	q.push(root);	int calc=0;	coutleft && !Front->right)		{			++calc;			coutvalueleft)			q.push(Front->left);		if(Front->right)			q.push(Front->right);	}	coutroot=HorizInsert(T->root,new node(Array[i]));	HorizPrint(T->root);}	

关于二叉树的一道C编程题,请各位高手帮忙写个完整代码。

8. 数据结构,二叉树这题的第三题

叶子结点有两个,一度节点有一个