導航:首頁 > 源碼編譯 > 設計演算法判斷是不是二叉樹

設計演算法判斷是不是二叉樹

發布時間:2023-01-28 17:17:34

1. 編寫演算法,判斷一顆二叉樹是否是完全二叉樹

#include <stdio.h>#include <stdlib.h>#define Max 100 typedef struct Node { char data; struct Node * LChild,*RChild;}BiTNode,*BiTree; void CreateBiTree(BiTree * bt) { char ch; ch=getchar(); if(ch==10)ch=getchar();//如果為 回車換行 讀取下一個字元 if(ch=='.') *bt=NULL; //如果為 . 代表此節點為空 else { * bt=(BiTree)malloc(sizeof(BiTNode)); (* bt)->data=ch; //賦值 CreateBiTree(&((* bt)->LChild)); CreateBiTree(&((* bt)->RChild)); } } bool fullBiTree(BiTree b) { if(b->LChild==NULL && b->RChild==NULL)return true;// 如果左右子樹為空,返回真 if(b->LChild==NULL || b->RChild==NULL)return false;// 如果左右子樹只有一個為空,返回假 return fullBiTree(b->LChild) && fullBiTree(b->RChild);// 通過遞歸,返回 } void main(){ printf("請依次輸入字元\n"); BiTree b; CreateBiTree(&b); //創建二叉樹 bool cm=fullBiTree(b); if(cm)printf("´此二叉樹為完全二叉樹\n"); else printf("´此二叉樹不是完全二叉樹\n"); }

2. 判斷一棵二叉樹是否為完全二叉樹演算法

#include "stdafx.h"
#include "iostream"
#define Max 100
using namespace std;

typedef struct Node
{ char data;
struct Node * LChild,*RChild;}BiTNode,*BiTree;

void CreateBiTree(BiTree * bt)
{
char ch;
ch=getchar();
if(ch=='.') *bt=NULL;
else
{
* bt=(BiTree)malloc(sizeof(BiTNode));
(* bt)->data=ch;
CreateBiTree(&((* bt)->LChild));
CreateBiTree(&((* bt)->RChild));
}
}

int fullBiTree(BiTree b)
{ //complete binary tree:完全二叉樹
//full:滿
BiTree queue[Max],p;
int first=0,rear=0,bj=1,cm=1;
if(b!=NULL)
{
rear++;
queue[rear]=b;
while(first!=rear)
{
first++;
p=queue[first];
if(p->LChild==NULL)
{
bj=0;
if(p->RChild!=NULL) cm=0;
}
else
{
cm=bj;
rear++;queue[rear]=p->LChild;
if(p->RChild==NULL) bj=0;
else
{
rear++;
queue[rear]=p->RChild;
}
}
}
return cm;
}
return 1;
}

int main(int argc, char* argv[])
{
cout<<"請依次輸入字元ABCO..UMJKL.EDC....."<<endl;
BiTree b;
CreateBiTree(&b);
int cm=fullBiTree(b);
if(cm)cout<<"此二叉樹為完全二叉樹"<<endl;
else cout<<"此二叉樹不是完全二叉樹"<<endl;

return 0;
}

3. 怎麼判斷是否是完全二叉樹 用C++或C語言

你可以上網先找一個用隊列實現二叉樹的廣度優先搜索的代碼,然後在代碼中增加一個標志變數tag,初始化為0。然後找到代碼中訪問結點的那句代碼,在那句代碼處增加
if(tag==0)
判斷該結點是否有兩個孩子,如果沒有兩個孩子,則將tag=1
else
判斷該結點是否為葉結點,如果不是葉結點,則不是完全二叉樹。

4. 用c++ 完成以下演算法:判別一棵樹是否為二叉樹!

這里可以用遞歸
不過不知道你的樹是哪種方式定義的具體代碼就不寫了,大體過程如下
if 結點有三個以上的結點 則返回不是,函數退出
if 第一個子結點不為空 判斷該子結點是否為二叉樹(也就是調用遞歸函數)
if 第二個子結點不為空 判斷該子結點是否為二叉樹(也就是調用遞歸函數)
還要加入一些必要的東西,乖下的你自己看看吧

5. 用c語言版數據結構的演算法實現判斷一棵二叉樹是否為完全二叉樹的演算法

遍歷一下算出這棵樹的深度k,然後用公式看看深度和點數之間是否具有點數n=2^k-1的關系,具有就是完全二叉樹,否則不是。

6. 演算法:判斷一棵樹是否是平衡二叉樹

判斷一顆數是否是平衡二叉樹。
平衡二叉樹。左孩子節點,總是小於父節點,右孩子節點總是大於父節點。
對於每一個節點都符合這樣的特性。

不是很麻煩,對於平衡二叉樹來說,它的中序遍歷必定是一個升序序列。
直接中序遍歷,如果出現後面的節點小於前面必定不是平衡二叉樹

這里保存的是上一個節點,如果只保存上一個值,需要考慮int值上下界限。有可能輸入Integer.MAX_VALUE的這種情況

7. 假設二叉樹用二叉鏈表表示;設計一演算法,判別該二叉樹是否為完全二叉樹。(求完整源代碼)如題 謝謝了

一定要完整源碼?如果沒有人給的話,建議你還是看一下我說的:就是一個二叉樹的遍歷。1.只要在遍歷的時候,發現當前深度大於log2(n)+1,就可以判斷不是。2.有一個變數,cnt初始化為n個節點的完全二叉樹最後一層節點的數目,計算方法:n - (2^k - 1)然後,只要不是後序遍歷,每次遍歷到深度為floor(log2(n))時,如果cnt不為0,而且兒子是空節點,則判斷不是,否則cnt--。遍歷完後,如果一直沒有判斷成不是,則一定是。

8. 編寫一演算法,判別給定的二叉樹是否是完全二叉樹。二叉樹用二叉鏈表儲存結構儲存

#include <stdio.h>#define MaxNum 10000BinTree buildTree(elementype BT[],int i , int n){ BinTree r;if(i>n)return(NULL);r=(BinTree)malloc(sizeof(BinNode));r->data=BT[i];r->Lchild=buildTree(BT,2*i,n);r->Rchild=buildTree(BT,2*i+1,n);return(r);}Int checkTree(BinTree t){ int maxn0=0;n=num(t,1,&maxn0);if(n==maxn0)return(1); else return(0); }int num(BinTree t,int i,int *m){ if(t==NULL) return(0); if(*m<i)*m=i;return(1+num(t->Lchild,2*i,m)+num(t->Rchild,2*i+1,m));}main( ){ int data,int t,int i,int *m; printf("input data:\n") scanf("%d,&data");if(t==NULL)printf("F\n")if(*m<i)*m=i;printf("T\n")}

9. 請編寫一個判別給定二叉樹是否為二叉排序樹的演算法

1、首先打開VC++6.0。

7、運行得到結果。

閱讀全文

與設計演算法判斷是不是二叉樹相關的資料

熱點內容
路由器ttl刷編程器固件 瀏覽:718
縱向加密密鑰協商狀態時間 瀏覽:850
mc花雨庭伺服器有些什麼 瀏覽:809
linux製作網頁 瀏覽:19
xlsx加密忘記了怎麼辦 瀏覽:999
app湖北農信怎麼解約 瀏覽:426
在線編程教育項目 瀏覽:759
電信采購5萬台伺服器干什麼用 瀏覽:200
騰訊雲伺服器登錄地址 瀏覽:988
程序員在地鐵上寫字 瀏覽:555
解壓包未知文件格式怎麼辦 瀏覽:576
程序員破壞資料庫 瀏覽:331
sh格式如何編譯 瀏覽:344
虛擬伺服器雲主機哪個好 瀏覽:98
單片機埠保護 瀏覽:948
iso壓縮gho 瀏覽:14
網關熔斷器演算法 瀏覽:629
不銹鋼高度演算法 瀏覽:170
基於單片機的畢業設計論文 瀏覽:658
久佳跑步機的app怎麼下載 瀏覽:201