當用陣列儲存完全二叉樹時可以用節點的編號作為陣列下標
當用陣列儲存非完全二叉樹時也可以用節點的編號作為陣列下標,但是要補全節點序列.(用虛擬節點)
2017/8/30 更新
父子節點的位置運算:
陣列0下標不使用
父節點i的左子節點在位置(2*i);
父節點i的右子節點在位置(2*i+1);
子節點i的父節點在位置(i/2);
//this is tree node size
#define size 20
//求深度
//完全二叉樹的最大節點數量s = (2^n)-1,n = 樹的高度
//對於乙個陣列結構的tree,要先求tree的深度n,求最大指數2^n-1=size = 2^n = size+1 。所以 n = log2 (size+1)。n向上取整
int getheight2(int size)
//求左孩子
int *getlchild(int arr,int index)
return &arr[index*2];
}//求右孩子
int *getrchild(int arr,int index)
return &arr[index*2+1];
}//求雙親
int *getparent(int arr,int index)
return &arr[index/2];
}//先序遍歷
void perorder2(int *arr, int len)
//列印空格
void printch(int k)
}//print tree
//列印tree,這樣有直觀的感受,按層列印
void printterr(int arr)
}printf("\n");
}//test tree for array
void treearrstest();
//先把tree列印出來,這樣比較直觀一點
printterr(treearr);
printf("\n");
perorder2(treearr, 1);
printf("\n");
printf(" node 5 left child is : %d\n",*getlchild(treearr,5));
printf(" node 5 right child is 6 : %d\n",*getrchild(treearr,5));
printf(" node 5 parent is : %d\n",*getparent(treearr,5));
}
二叉樹的鏈式儲存及基本運算
問題描述 01.02.05.檔名稱 painc.cpp 06.作 者 田 07.完成日期 2015年11月9日 08.版 本 號 v1.0 09.10.問題描述 二叉樹的鏈式儲存及基本運算 11.程式輸出 程式介紹 標頭檔案 ifndef btree h included define btree ...
陣列順序儲存二叉樹
一般先判斷 陣列是否為空,然後再判斷長度是否為0,因為可能報空指標異常。不初始化的時候,預設是null。所以如果在一行 中要同時判斷的時候需要這樣寫 if array null array.length 0 注意 是度短路,如果為空,後面就不判斷了。package com public class ...
二叉樹儲存及遍歷
二叉樹儲存及遍歷 1 樹的儲存 注意 樹的深度是從根節點開始 其深度為1 自頂向下逐層累加的,而高度是從葉節點開始 其高度為1 自底向上逐層累加的。雖然樹的深度和高度一樣,但是具體到樹的某個節點,其深度和高度是不一樣的。我的理解是 非根非葉結點的深度是從根節點數到它的,高度是從葉節點數到它的。二叉樹...