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

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

發布時間: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、運行得到結果。

閱讀全文

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

熱點內容
用紙做解壓玩具不用澆水 瀏覽:582
谷輪壓縮機序列號 瀏覽:734
牛頓插值法編程 瀏覽:364
php多用戶留言系統 瀏覽:727
安卓和蘋果如何切換流量 瀏覽:703
怎麼知道dns伺服器是多少 瀏覽:976
5995用什麼簡便演算法脫式計算 瀏覽:918
電腦上如何上小米雲伺服器地址 瀏覽:921
手機資料解壓密碼 瀏覽:444
44引腳貼片單片機有哪些 瀏覽:692
阿里程序員腦圖 瀏覽:189
廣東編程貓學習班 瀏覽:708
上海數控編程培訓學校 瀏覽:313
怎麼下載我的解壓神器 瀏覽:634
lib文件無用代碼會編譯嗎 瀏覽:28
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1002
mvn命令順序 瀏覽:978
車貸還完多少時間解壓 瀏覽:965
java頁面開發 瀏覽:820
學編程的小發明 瀏覽:25