用二叉鏈表存儲樹
1. 為什麼用二叉鏈表存儲樹,則根節點的右指針是空 為什麼不是指向右孩子
將一棵樹轉化為二叉樹,此時二叉樹的根節點的右指針為空,
因為這個指針是用來指向另一棵樹的根節點的。具體情況你
也可以參看森林轉化為二叉樹的方法。
2. 利用二叉鏈表存儲樹,則根節點的右指針是空的,這是為什麼呢,謝謝
二叉鏈表存儲樹結構,那麼任意節點的左孩子指向該結點的孩子結點,右孩子指針指向該節點的兄弟節點,因為這里是樹,不是森林,所以樹的根節點沒有兄弟結點,則右指針是空。
3. 利用二叉鏈表存儲樹,則根結點的右指針是 為什麼答案不是右孩子是空
因為存的是一般樹,二叉鏈表儲存要先化成二叉樹,根節點沒有兄弟,右指針為空
4. 用二叉鏈表存儲樹,為什麼根結點的右指針是空,數據結構
採用二叉樹結構存儲樹或森林,即樹/森林的左子右兄表示法。
二叉樹中節點的左「孩子」是原樹/森林對應節點的「長子節點」,右「孩子」是原樹/森林對應節點的「兄弟節點」。
而樹的根節點是沒有兄弟的,故在二叉鏈表中它的右指針為空()
5. 運用C++如何使用二叉鏈表存儲二叉樹,遍歷輸出葉子節點路徑,遞歸輸出葉子節點值,輸出樹的深度
構造的二叉樹結構如下:
6. 用二叉鏈表存儲包含N個結點的二叉樹,結點的2N個指針域中有N+1個空指針
首先
二叉樹的節點都有2個指針。每個節點有0個、1個或2個空指針。對應的有2個、1個、0個非空指針。非空指針的總數就是二叉樹的邊的個數。
設一個二叉樹x個節點含有0個空指針,y個節點有1個空指針,z個節點有2個空指針
有如下等式
1、 x+y+z=N 節點總數為N,題目敘述
2、 y+2*z=N+1空指針個數為N+1,題目敘述
3、 2*x+y= N-1 二叉樹的邊數。樹的邊數=樹的節點數-1
解以上方程組就可得出樹的幾種類型的節點數了。你就可以構造這個二叉樹了。如果方程組有解
一般可以構造的二叉樹是很多的。
7. 二叉樹只能採用二又鏈表來存儲.,這個是否正確,為什麼
不是的.
二叉鏈表只是最直觀的一種存儲方式.而事實上,大部分的情況都不會使用二叉鏈表.除了一些動態調整樹的演算法比如平衡樹.
更為普遍的存儲方式是用線性表來儲存二叉樹.這種方式下,線性表N存儲的節點是N div 2的兒子節點.
8. 以二叉鏈表作為二叉樹的儲存結構,在具有n個結點的二叉鏈表中n(n>0),空鏈域的個數為()
以二叉鏈表作為二叉樹的儲存結構,在具有n個結點的二叉鏈表中n(n>0),空鏈域的個數為n+1。
二叉鏈表結構描述:
typedef struct CSNode{
ElemType data;
struct CSNode *firstchild , *netsibling;
} CSNode,* CSTree;
由於二叉樹的存儲結構比較簡單,處理起來也比較方便,所以有時需要把復雜的樹,轉換為簡單的二叉樹後再作處理。
(8)用二叉鏈表存儲樹擴展閱讀:
二叉樹類型:
1、完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。
2、滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
3、平衡二叉樹——平衡二叉樹又被稱為AVL樹(區別於AVL演算法),它是一棵二叉排序樹,且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
9. 二叉鏈表存儲二叉樹的先序遍歷演算法
二叉鏈表存儲二叉樹的先序遍歷演算法,通常採用遞歸的演算法實現。首先訪問二叉樹的根節點,然後遞歸遍歷它的左子樹,最後,遞歸遍歷他的右子樹。
10. 若用二叉鏈表作為二叉樹的存儲表示,試編寫演算法交換二叉樹中各結點的左右子數。
遞歸:
void exchange(BTree *rt){
BTree *temp = NULL;
if(rt->lchild == NULL && rt->rchild == NULL)
return;
else{
temp = rt->lchild;
rt->lchild = rt->rchild;
rt->rchild = temp;
}
if(rt->lchild)
exchange(rt->lchild);
if(rt->rchild)
exchange(rt->rchild);
}
非遞歸:
Stack是一個定義好的通用堆棧類型,支持初始化/進站/出戰等操作
int Exchange(BiTree *T)
{
Stack s;
BiTree *p;
InitStack(s);
p=T;
while(p||!StackEmpty(s)){
if(p){
push(s,p);
p->Lchild;
}
else{
pop(s,p);
t=p->Rchild;
p->Rchild=p->Lchild;
p->Lchild=t;
p-=->Lchild;
}
}
return 1;
}