二叉樹的問題,二叉樹問題

2023-01-25 00:10:52 字數 3699 閱讀 5403

1樓:匿名使用者

二叉樹就是僅有兩個分支,而且左右分支位置不能交換的樹型結構。a/\b c

/\d e

這就是一個簡單的二叉樹。

所謂中序遍歷就是指訪問二叉樹時先訪問左孩子,接著訪問它的雙親,最後訪問右孩子的一種遍歷方法。

有一個資料結構的學習網頁,不錯。還有動畫配合理解。

二叉樹問題 50

二叉樹問題

2樓:

先解釋為什麼d對,因為二叉樹的二叉連結串列儲存時,連結串列中的每個結點包含兩個指標,分別指向結點的左孩子和右孩子。而樹的連結串列儲存時,連結串列中的結點的兩個指標分別指向孩子結點和兄弟結點。

將二叉樹轉化成樹或者樹林的時候,如果二叉樹的右子樹為空,則轉化出的是樹,如果右子樹不為空,則轉化出的是樹林,因為此時要看成是左孩子右兄弟,不知道這樣解釋你是否明白。

b之所以錯了,是因為子樹下面還有子樹,子樹還可以有自己的子樹。

二叉樹中,每個結點最多隻有兩個後繼結點,你理解的是最多就這兩棵子樹,實際上,子樹中的結點都是該結點的子孫,那麼下面的所有的子樹都是它的子樹。

若有不明白,還可以繼續問我~呵呵

3樓:酋長的爺爺

d是正確的。原因參考森林的二叉鏈式儲存方式。

b錯在「二叉樹是樹的特殊情況」這一句。二叉樹和樹是兩個概念,你的教材裡關於二叉樹的定義,應該是一個和「樹」的定義無關的遞迴定義。後半句關於子樹個數的說法沒有任何問題。

計算機二級二叉樹問題 50

4樓:葉幫陽

假設有n個葉子節點,如果某個葉子節點又延伸出來m個葉子節點,則葉子節點數量就是n-1+m

所以看題中,假設一開始只有一個根節點(同時也是葉子節點),它的度為4,這時葉子節點數為1-1+4=4,這時有一個葉子節點度變成3,總的葉子節點數量就是4-1+3=6

類推下去,葉子節點總數為1+(4-1)+(3-1)+(2-1)*2+(1-1)*4=8

如果整理成另一個公式就是1+1*n1+2*n2...+m*nm-(n1+n2+n3...+nm),其中ni就是度為i的節點數量,用到題中就是1+1*4+2*2+3*1+4*1-(4+2+1+1)=8

資料結構二叉樹問題

5樓:獅子安安

1全部從複雜度來說前序,後序都是相近的,中序和層次顯然在邏輯上要複雜不少。前序是:先交換當前結點的左右子樹,其次對左子樹內部的結點做交換,最後對右子樹的結點做交換。

後序是:對左子樹內部的結點做交換,其次對右子樹的結點做交換,最後交換當前節點的左右子樹。相比於前序和後序,後序更符合一般性的邏輯思維過程,如分治法思想,將整棵樹的問題分割為各個子樹的問題,然後在解決完各個子樹問題之後歸集為整棵樹的解。

所以後序是最合適的。

6樓:最大的寶寶

走了一下,覺得你寫的沒錯。前序的方法,根,左子樹,右子樹。先訪問根,然後對左子樹以前序方式進行遞迴,然後前序遞迴右子樹。

其他的兩種類似,不同在於三者先後的順序。邏輯很簡單,所以你看這個遍歷的偽**是很簡單的

資料結構二叉樹問題

7樓:流年1過

1全部這是根據所描述的樹的性質算出來的啊

思想:根據他的描述,意思就是在這顆樹中,對於所有的節點,它要麼有兩個孩子節點,要麼沒有子節點。可以利用樹中的枝條(就是連線兩個節點之間的直線)數目規律算出來。

枝條數目=總節點-1=非葉子節點*2 ----①

設總節點數目為x,那麼有

總節點數:x

葉子節點:n

非葉子節點:x-n

所以①可以轉化為等式:

x-1=(x-n)*2

所以x=2n-1

謝謝採納

二叉樹的一些問題

8樓:雨曄

答案正確啊,如下圖

/*經改正後能正常執行,無限輸入主要是由於scanf引起的詳細請看

注意構建樹的輸入順序

比如要構建

``````1

`````2``5

``3``4

這棵樹,則輸入應為1-2-3-!-!-4-!-!-5-!-! */#include "stdio.h"

#include "malloc.h"

#define maxsize 100

typedef char elemtype;

typedef struct bitnodeelemtype data;

struct bitnode *lchild, *rchild;

} bitnode;

bitnode *root;

bitnode* createbittree()elemtype ch;

bitnode *t;

printf("請輸入節點字元,!為空樹:");

scanf("%c",&ch);

fflush(stdin);//清除一個輸入流if (ch=='!')

t=null;

else

t=(bitnode *)malloc(sizeof(bitnode));

t->data=ch;

t->lchild=createbittree();

t->rchild=createbittree();

return t;

void inorder(bitnode *head)bitnode *t=null;

t=head;

if(t)

inorder(t->lchild);

printf("%c\t",t->data);

inorder(t->rchild); //這裡寫錯了,原來是inorder(t->lchild);

void main()

bitnode *b;

b=createbittree();

inorder(b);

9樓:涵下貴

程式不停地讓你輸入是因為你的「空樹」標記是'!',而一直沒有遇到'!'所致;

但為什麼會一直沒有遇到'!',那是因為它把你輸入時敲進的回車符'\n'也當作一個樹的data儲存起來了,所以要讓程式正確,必須每次在scanf的時候也把你敲的回車符也讀掉:

#include "stdio.h"

#include "malloc.h"

#define maxsize 100

typedef char elemtype;

typedef struct bitnodebitnode;

bitnode *root;

bitnode* createbittree()else

return t;

}void inorder(bitnode *head)}main()

執行試試吧,因該ok了。

10樓:

呵呵,要記住輸入的時候不能完全按先序序列來,單純由先序序列是不能確定一棵二叉樹的,比如對於一棵根為a,左子樹為b,右子樹為c的二叉樹,你得輸入ab!!c!!

滿二叉樹和完全二叉樹的區別

滿二叉樹 除了葉結點外每一個結點都有左右子女且葉結點都處在最底層的二叉樹,這個似乎很好想像出來 完全二叉樹 只有最下面的兩層結點度小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹 這個,就說從滿二叉樹裡,最下一層的葉子,如果是從右往左拿掉葉子,不論多少,都是完全的,如果不是從右往左拿...

資料結構二叉樹題目,資料結構二叉樹題目

下面是c 的 主要是一個遞迴的思維。收好都是我自己寫的,能用 bintree.h 定義 struct node class bintree bintree.cpp bintree.cpp implementation of the bintree class.include bintree.h bi...

請解釋下二叉樹的度數,二叉樹的度是什麼?

二叉樹度數最大為2吧,有個關係是度數為2的結點個數加1等於度數為零的結點個數。什麼叫二叉樹的度?帶你了解它的特點。二叉樹樹是一種重要的非線性資料結構,直觀地看,它是資料元素 在樹中稱為結點 按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構...