深度演算法
❶ 求二叉樹的深度演算法(具體點)
具有
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;
這個就是終止條件了,如果沒有子節點就返回。