以二叉連結串列為儲存結構,分別寫出求二叉樹結點總數及葉總數的演算法。(資料結構)

2022-03-21 03:52:45 字數 4412 閱讀 9873

1樓:蔡成棟

先設計了一個結構體形式int n; cout<<"請輸入二叉樹內容:第一行為節點總數n ,後面的n行是節點,謝謝

2樓:_青青子衿

int countnode (btnode *t) //節點總數

void countleaf (btnode *t) //葉子節點總數}

3樓:易xiao萱

//求葉子節點數

#include

using namespace std;

int n=0;//全域性變數求葉子總數

template

struct binode

;template

class bitree

int preorder()

private:

binode*root;

int count;

binode*creat(binode*bt);

int preorder(binode*bt);

};template

int bitree::preorder(binode*bt)return n;

}template

binode*bitree::creat(binode*bt)return bt;

}int main()

;template

class bitree

int preorder()

private:

binode*root;

int count;

binode*creat(binode*bt);

int preorder(binode*bt);

};template

int bitree::preorder(binode*bt)return n;

}template

binode*bitree::creat(binode*bt)return bt;

}int main()

資料結構中,怎樣以二叉連結串列為儲存結構,分別寫出求二叉樹結點總數及葉子總數的演算法?

4樓:匿名使用者

同學,你們老師和我們老師留的作業是一模一樣的阿,我有現成的做好了的程式,除錯成功。這個程式的難點就在於這種很彆扭的輸入形式,所以我為它設計了一個結構體形式存放輸入內容,再將它轉化成了線性結構。

#include

#include

struct inform /*建立輸入資訊結構體inform*/

;struct leafnode /*建立葉子節點結構體*/

;void print(inform* ps, int n);

void judge ( inform* ps );

leafnode* creatree(); /*宣告二叉樹的建立函式*/

void preorder (leafnode* t); /*宣告先序遍歷函式*/

void inorder (leafnode* t); /*宣告中序遍歷函式*/

void postorder (leafnode* t); /*宣告後序遍歷函式*/

char a[100];

int k=1;

int s=0;

inform *p;

void main()

a[0]= p->data;

judge ( p1 ); /*用遞迴演算法將輸入資料資訊轉為線性字串*/

cout

else

if ((ps->signr) == 0)

else

}leafnode* creatree() /*建立二叉樹函式*/

else

return t;

} /*先序遍歷的遞迴函式*/

void preorder (leafnode* t)

}/*中序遍歷的遞迴函式*/

void inorder (leafnode* t)

}/*後序遍歷的遞迴函式*/

void postorder (leafnode* t)}

5樓:易xiao萱

//求葉子節點數

#include

using namespace std;

int n=0;//全域性變數求葉子總數

template

struct binode

;template

class bitree

int preorder()

private:

binode*root;

int count;

binode*creat(binode*bt);

int preorder(binode*bt);

};template

int bitree::preorder(binode*bt)return n;

}template

binode*bitree::creat(binode*bt)return bt;

}int main()

;template

class bitree

int preorder()

private:

binode*root;

int count;

binode*creat(binode*bt);

int preorder(binode*bt);

};template

int bitree::preorder(binode*bt)return n;

}template

binode*bitree::creat(binode*bt)return bt;

}int main()

6樓:蔡成棟

先設計了一個結構體形式int n; cout<<"請輸入二叉樹內容:第一行為節點總數n ,後面的n行是節點,謝謝

7樓:匿名使用者

int countnode (btnode *t) //節點總數

void countleaf (btnode *t) //葉子節點總數}

8樓:匿名使用者

int jiedian(btnode *b)//節點總數

int yezi(btnode *b)//葉子總數

【資料結構】求二叉樹中葉子結點個數的演算法或求二叉樹中結點個數的演算法

9樓:匿名使用者

返回bai葉du

子結zhi點dao個數專

:屬int getyeatnodenumber(treenode *root)

以二叉連結串列為儲存結構,寫出求二叉樹高度和寬度的演算法

10樓:兔老大米奇

樹的高度:對非空二叉樹,其深度等於左子樹的最大深度加1。

int depth(bintree *t)

樹的寬度:按層遍歷二叉樹,採用一個佇列q,讓根結點入佇列,最後出佇列,若有左右子樹,則左右子樹根結點入佇列,如此反覆,直到佇列為空。

int width(bintree *t)void countleaf (btnode *t)

//葉子節點總數}。

擴充套件資料

方法:求二叉樹的高度的演算法基於對二叉樹的三種遍歷,可以用後序遍歷的演算法加上記錄現在的高度和已知的最高的葉子的高度,當找到一個比已知高度還要高的葉子,重新整理最高高度。

最後遍歷下來就是樹的高度,至於後序遍歷的演算法,是一本資料結構或者演算法的書中都有介紹和參考**

11樓:匿名使用者

原題:以二叉連結串列為儲存結構,分別寫出求二叉樹高度及寬度的演算法。所謂寬度是指在二叉樹的各層上,具有結點數最多的那一層上的結點總數。

標準答案:

①求樹的高度

思想:對非空二叉樹,其深度等於左子樹的最大深度加1。

int depth(bintree *t)②求樹的寬度

思想:按層遍歷二叉樹,採用一個佇列q,讓根結點入佇列,最後出佇列,若有左右子樹,則左右子樹根結點入佇列,如此反覆,直到佇列為空。

int width(bintree *t)while(frontlchild!=null)if(t->rchild!=null)

if(front==p)

/* 當前層已遍歷完畢*/

}/* endwhile*/

return(flag);}

12樓:匿名使用者

遞迴,用一個一維陣列維護各層的節點數資訊。層序遍歷 類似bfs 藉助一個佇列。

深度為7的完全二叉樹中共有結點該完全二叉樹中的葉子結點有多少

這題答bai題方法有兩個公du式可用,深度為zhik的完全二叉樹最dao多有2的k次 1個結點,第k層最多內有容2的 k 1 次結點。前6層總共結點數 2 6 1 63,這裡總共有125個,所以第7層有125 63 62個。另外,第7層最多有64個,第6層32個。所以葉子結點數 第6層葉子結點 第7...

性質完全二叉樹中度為1的結點數為1或0怎麼理解

完全二叉樹,可以來看做是滿二叉源樹在最bai後一層從右往左砍掉一些節點。注du意,zhi滿二叉樹的所有節點的度都是dao2或者0,沒有度為1的節點。如果從滿二叉樹中在最後一層自左向右砍掉的節點數是偶數,那麼該完全二叉樹中度為1的節點數就是0。如果砍掉的節點數是奇數,那麼該完全二叉樹中就有且僅有一個節...

在深度為7的滿二叉樹中,度為2的結點個數為20,怎麼算的

滿二叉樹處最後一層葉子結點外,其他結點都是度為2的,滿二叉樹沒有度為1的結點。所以前6層結點總數為2 6 1 63度為2的節點個數是63 深度為7的滿二叉樹度為0的節點個數是64個,總結點數127個,本題答案應該有問題。若一棵二叉樹有11個葉子結點,則該二叉樹中度為2的結點個數是?節點個數是10。1...