1樓:匿名使用者
用一個線性表和一個佇列,表存放的是邊集,佇列用於按層次遍歷。程式流程如下
1 初始化空表、空隊;
2 輸入結點數、指定根結點,輸入邊到表中;
3 根結點進隊;
4 將隊首出隊到p;
5 若表為空,返回1(真)。不空則在表中查詢第一項等於p的邊i。若找到,將邊i的第二項進隊,從表中刪除邊i。若沒有找到,則返回0(假)。
6 若表為空,返回1(真)。不空則在表中查詢第二項等於p的邊i。若找到,將邊i的第一項進隊,從表中刪除邊i。若沒有找到,則返回0(假)。
7 跳到4。
補充提供一個相應的程式**如下,你可以試試
#include
#define n 1024
void main( )
for(i = 0; i < listlength && list[i][0] != p; i++); /*尋找第一項等於p的邊i*/
if(i == listlength)
queue[rear++] = list[i][1]; /*將邊i的第二項進隊*/
for(; i < listlength - 1; i++) /*刪除邊i*/
list[i][0] = list[i + 1][0], list[i][1] = list[i + 1][1];
listlength--;
if(listlength == 0)
for(i = 0; i < listlength && list[i][1] != p; i++); /*在表中查詢第二項等於p的邊i*/
if(i == listlength)
queue[rear++] = list[i][0]; /*將邊i的第一項進隊*/
for(; i < listlength - 1; i++) /*刪除邊i*/
list[i][0] = list[i + 1][0], list[i][1] = list[i + 1][1];
listlength--;
} /*7 跳到4*/
if(flag)
printf("yes\n");
else
printf("no\n");
}執行結果
2樓:我兒王騰大帝之資
我怎麼感覺你的例子應該輸出no呢
怎麼判斷是否是完全二叉樹 用c++或c語言
3樓:匿名使用者
你可以上網先找一個用佇列實現二叉樹的廣度優先搜尋的**,然後在**中增加一個標誌變數tag,初始化為0。然後找到**中訪問結點的那句**,在那句**處增加
if(tag==0)
判斷該結點是否有兩個孩子,如果沒有兩個孩子,則將tag=1else
判斷該結點是否為葉結點,如果不是葉結點,則不是完全二叉樹。
4樓:匿名使用者
廣度優先搜尋整個二叉樹,一旦找一個節點只不含有子節點或者子含有一個左子節點,那麼後續的所有節點都必須是葉子節點。否則,該樹就不是完全二叉樹。
實現的時候需要用到佇列。
下面是程式:
#include
#include
class treenode
~treenode()
if (right != null) }};
struct queuenode ;
//用連結串列的方式實現佇列
class queue
void enqueue(treenode *node) else
}//判斷佇列是否是空
bool isempty()
//出佇列
treenode * dequeue()
p->next = null;
delete p; //刪除佇列節點
return ptree;
}~queue()}};
/*判斷一個二叉樹是否是完全二叉樹
廣度優先搜尋整個二叉樹,一旦找一個節點只不含有子節點或者子含有一個左子節點,
那麼後續的所有節點都必須是葉子節點。否則,該樹就不是完全二叉樹。
*/ bool iscompbintree(treenode *root)
else if (p->left != null && p->right==null) else if (p->left == null && p->right!=null) else
} else }}
if (iscompbtree) else
return iscompbtree;}/*
1 1
2 3 2 3
4 5 4 5 6
*/void clear(treenode *ele, int n)
}int main()
printf("case 1: ");
root = ele[0];
root->left = ele[1]; root->right=ele[2];
root->left->left=ele[3]; root->left->right=ele[4];
iscompbintree(root);
printf("case 2: ");
clear(ele, 10);
root = ele[0];
root->left = ele[1]; root->right=ele[2];
root->left->right=ele[3]; root->right->left=ele[4]; root->right->right=ele[5];
iscompbintree(root);/*1
*/printf("case 3: ");
clear(ele, 10);
root = ele[0];
iscompbintree(root);/*1
23*/printf("case 4: ");
clear(ele, 10);
root = ele[0];
root->left = ele[1];
root->left->left = ele[2];
iscompbintree(root);/*1
2*/printf("case 5: ");
clear(ele, 10);
root = ele[0];
root->left = ele[1];
iscompbintree(root);/*1
2 3
4 5*/
printf("case 6: ");
clear(ele, 10);
root = ele[0];
root->left = ele[1]; root->right=ele[2];
root->right->left = ele[3]; root->right->right = ele[4];
iscompbintree(root);
clear(ele, 10);
for(int i=0; i<10; i++)
system("pause");
return 0;}
c語言判斷完全二叉樹
5樓:匿名使用者
lz完成了
#include "stdio.h"
#include "stdlib.h"
#define max 100
typedef struct node
bitnode,*bitree;
void createbitree(bitree * bt) }bool fullbitree(bitree b)void main()
6樓:匿名使用者
二叉樹儲存結構
struct bt
int check (struct bt *root)
7樓:匿名使用者
30分太少了,給我200分給你寫程式。
c語言判斷是否為完全二叉樹
8樓:哦仙人
如果是滿二叉樹不就找不到只有一個孩子的結點了嗎。。。。。。。。
好像排除掉這個就可以了,個人看法,我資料結構倒不很好。
9樓:凌雲紫冥
我覺得這個方法是可行的。 大方向沒錯,細節方面處理好就行。
10樓:匿名使用者
完全可以,但不知道你的實現複雜度。
資料結構,完全二叉樹問題(用c語言)
怎樣判斷一棵二叉樹為完全二叉樹是完全二叉樹不是滿二叉樹!(用c語言)
11樓:匿名使用者
滿二叉樹:深度為k,且有結點個數2的k次方減1
完全二叉樹:深度為k,有n個結點的二叉樹,當且僅當每一個結點都與
深度為k的滿二叉樹中編號從1到n的結點一一對應(最多一層不滿)
c語言怎麼判斷一顆二叉樹是否為完全二叉樹 思路是什麼
12樓:
按層次遍歷,先找出結點中左右孩子都沒有的第一個結點,然後判斷其後的結點是不是都沒有左右孩子,如果是則返回0,是完全二叉樹,否則不是完全二叉樹
13樓:盧居亮
1 先求 樹的深度h
2 再求 結點總數n
3 n應該在[2的h-1次冪-1,2的h次冪-1]之間 如果不再此區間 就不是完全二叉樹
c語言 什麼叫完全二叉樹?
14樓:匿名使用者
在電腦科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用作二叉查詢樹和二叉堆。
二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的(i-1)次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。 樹和二叉樹的2個主要差別:
1. 樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2; 2. 樹的結點無左、右之分,而二叉樹的結點有左、右之分。
…… 樹是一種重要的非線性資料結構,直觀地看,它是資料元素(在樹中稱為結點)按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式時,可用樹表示源程式的語法結構。
又如在資料庫系統中,樹型結構也是資訊的重要組織形式之一。一切具有層次關係的問題都可用樹來描述。 謝謝採納
15樓:匿名使用者
完全二叉樹是一種特殊的二叉樹。
定義:如果一棵具有n個結點的深度為k的二叉樹,它的每一個結點都與深度為k的滿二叉樹中編號為1~n的結點一一對應,這棵二叉樹稱為完全二叉樹。
例:特點:
葉子結點只可能在最大的兩層上出現,對任意結點,若其右分支下的子孫最大層次為l,則其左分支下的子孫的最大層次必為l 或 l+1。
完全二叉樹第i層至多有2^(i-1)個節點,共i層的完全二叉樹最多有2^i-1個節點。
滿二叉樹:除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹。
設一棵完全二叉樹有結點,則該完全二叉樹的深度為,有葉子結點
256。二叉樹 binary tree 是指樹中節點的度不大於2的有序樹,它是一種最簡單且最重要的樹。二叉樹的遞迴定義為 二叉樹是一棵空樹,或者是一棵由一個根節點和兩棵互不相交的,分別稱作根的左子樹和右子樹組成的非空樹 左子樹和右子樹又同樣都是二叉樹 二叉樹 binary tree 是樹形結構的一個...
判斷一棵二叉樹是否為二叉排序樹C資料結構
struct node node l node r static bool isorderedbtree node n,int cmp func node node if isorderedbtree n l,cmp func if n r 0 if isorderedbtree n r,cmp f...
C語言中 二叉樹的順序儲存結構和二叉連結串列,三叉連結串列儲存結構各
鏈式結構優點bai都是便 du於定址,二叉連結串列缺點zhi結構性開銷隨著數dao據結構的回規模變大而答變大 尤其是葉子節點都有2個null,即損失2 sizeof elemtype 線性結構優點沒有結構性開銷,缺點個人感覺是插入和刪除不夠方便?試用場合估計取決問題規模大小,即空間複雜度和時間複雜度...