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

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

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

閱讀全文

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

熱點內容
沒學歷的怎麼學編程 瀏覽:893
華為的隱藏相冊無法加密 瀏覽:774
聯通套餐app怎麼設置 瀏覽:748
關於刪除鏈表的演算法描述 瀏覽:889
標准盤和壓縮盤的區別 瀏覽:42
銀行存款驗證碼JAVA編程 瀏覽:106
word轉pdf軟體免費版 瀏覽:137
公主連結安卓台服怎麼下載 瀏覽:540
注冊江蘇銀行app怎麼注冊 瀏覽:796
中興怎麼下載app視頻 瀏覽:673
伺服器審計是什麼 瀏覽:514
華為刪除的app怎麼徹底卸載 瀏覽:570
編程時調試快捷鍵 瀏覽:4
安卓手機玩亞服怎麼下載 瀏覽:337
思域壓縮機多少錢 瀏覽:691
程序員代碼合適嗎 瀏覽:288
復利計演算法律保護 瀏覽:741
代號f2伺服器連接失敗怎麼搞 瀏覽:960
旋律雲我的世界伺服器靠譜嗎 瀏覽:67
pdf降低大小 瀏覽:235