深度算法
❶ 求二叉树的深度算法(具体点)
具有
n
个结点的完全二叉树的深度为
log2n
+1
。以2为底的N的对数加1
❷ 怎样理解深度优先算法和广度优先算法
胡说八道.... 深度优先:前序遍历 广度优先:按层遍历
❸ 写一个求二叉树的深度的算法
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *left,*right;
}Node,*PNode;
PNode createBtree(PNode root)//创建二叉树,控制台下输入,基于先序遍历输入
{
char data;
scanf("%c",&data);
if (data==' ')
{
root=NULL;
return root;
}
root = (PNode)malloc(sizeof(Node));
root->data = data;
root->left = createBtree(root->left);
root->right = createBtree(root->right);
return root;
}
int depth(PNode root)//这就是你要的函数。
{
int ld,rd;
if (root==NULL)
{
return 0;
}
ld = 1+depth(root->left);
rd = 1+depth(root->right);
return ld>rd?ld:rd;
}
int main()
{
PNode root=NULL;
root = createBtree(root);
printf("%d",depth(root));
return 0;
}
为了测试,写了二叉树的建立程序;
如下输入可以看到结果
虚节点用空格输入的。例如你输入
先序遍历
234空格空格5空格6空格空格7空格空格回车就可以看到结果。
另外,本算法是从1开始算深度的,就是根节点是深度下。
❹ 设计算法求二叉树的深度
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *left,*right;
}Node,*PNode;
PNode createBtree(PNode root)//创建二叉树,控制台下输入,基于先序遍历输入
{
char data;
scanf("%c",&data);
if (data==' ')
{
root=NULL;
return root;
}
root = (PNode)malloc(sizeof(Node));
root->data = data;
root->left = createBtree(root->left);
root->right = createBtree(root->right);
return root;
}
int depth(PNode root)//这就是你要的函数。
{
int ld,rd;
if (root==NULL)
{
return 0;
}
ld = 1+depth(root->left);
rd = 1+depth(root->right);
return ld>rd?ld:rd;
}
int main()
{
PNode root=NULL;
root = createBtree(root);
printf("%d",depth(root));
return 0;
}
为了测试,写了二叉树的建立程序;
如下输入可以看到结果
虚节点用空格输入的。例如你输入
先序遍历
234空格空格5空格6空格空格7空格空格回车就可以看到结果。
另外,本算法是从1开始算深度的,就是根节点是深度下。
树的图形参考
http://hi..com/huifeng00/blog/item/c1e37a4d59310b3caec3ab32.html
❺ 深度缓存算法包括哪些步骤
深度缓存(Z-buffer)算法是一种典型的、简单的图象空间面消隐算法。该算法需要一个深度缓存数组 ZB,此外还 需要一个颜色属性数组 CB ,它们的大小与屏幕上像素点的个数相同。 Z-buffer 算法的步骤如下:
(1)初始化 ZB 和 CB,使得 ZB(i,j)=Zmax,CB(i,j)=背景色,i=1,…, m; j=1,…,n。
(2)对多边形 P,计算它在点(i,j)处的深度值 zi,j。
(3)若 zi,j< ZB(i,j),则 ZB(i,j)=zi,j,CB(i,j)=多边形 P 的颜色。
(4)对每个多边形重复(2) 、 (3)两步,最终在 CB 中存放的就是消隐后的图形。 这个算法的关键在第(2)步,要尽快判断出哪些点落在一个多边形内,并尽快求出一个点的深度值。这里需要应用 多边形点与点之间的相关性,包括水平相关性和垂直相关性。
❻ 深度优先算法 和 宽度优先算法 的优缺点
1、深度优先算法占内存少但速度较慢,广度优先算法占内存多但速度较快,在距离和深度成正比的情况下能较快地求出最优解。
2、深度优先与广度优先的控制结构和产生系统很相似,唯一的区别在于对扩展节点选取上。由于其保留了所有的前继节点,所以在产生后继节点时可以去掉一部分重复的节点,从而提高了搜索效率。
3、这两种算法每次都扩展一个节点的所有子节点,而不同的是,深度优先下一次扩展的是本次扩展出来的子节点中的一个,而广度优先扩展的则是本次扩展的节点的兄弟点。在具体实现上为了提高效率,所以采用了不同的数据结构。
❼ 请写出计算二叉树的深度的算法
typedef struct tree//二叉树的定义
{ char data; struct tree *lchild,*rchild; }TREE,*Tree;
void create(Tree t)//创建一棵二叉树
{ char ch; scanf("%c",&ch); if(ch=='#') t=NULL;
else { t->data=ch; create(t->lchild); create(t->rchild); }
}
int deep(Tree t)//深度算法
{ if(!t) return 0; else { ld=deep(t->lchild); rd=deep(t->rchild);
if(ld>rd) return rd+1; else return ld+1;
}
void main()//主函数
{ Tree t; create(t); printf("%d\n",deep(t)); }
❽ 关于递归算法求二叉树深度算法
u,v 分别求出当前节点左子树和右子树的深度(高度),
然后当前节点的 深度就等于左右子树里面较大的那个+1.
if (u>n) return (u+1)
return (v+1)
这句就是返回较深的+1.
u=height(T->lchild);
v=height(T->rchild);
这两句就是递归的调用,求深度了。
if (T==NULL) return 0;
这个就是终止条件了,如果没有子节点就返回。