二叉樹的陣列儲存及運算

2022-09-03 09:12:10 字數 1362 閱讀 2605

當用陣列儲存完全二叉樹時可以用節點的編號作為陣列下標

當用陣列儲存非完全二叉樹時也可以用節點的編號作為陣列下標,但是要補全節點序列.(用虛擬節點)

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 自底向上逐層累加的。雖然樹的深度和高度一樣,但是具體到樹的某個節點,其深度和高度是不一樣的。我的理解是 非根非葉結點的深度是從根節點數到它的,高度是從葉節點數到它的。二叉樹...