二叉樹的建立和遞迴 非遞迴遍歷

2021-09-25 19:04:16 字數 1643 閱讀 3789

二叉樹的葉子結點總是比雙分支結點多乙個。

滿二叉樹:如果有h層,則總結點個數為2h(次方)-1,每一層有2h-1(次方)個結點。

分析:

演算法描述:

**:

# include # include # define n 9

//定義結構體:結點資訊

typedef struct nodebtnode; // 結構體名為btnode

btnode * creattree(int,int);

void forder(btnode * root);

void inorder(btnode * root);

void lastorder(btnode * root);

void forder2(btnode * root);

int main(void); // 這裡直接固定了建立二叉樹的值

root = creattree(a, 8); // 呼叫建立二叉樹的函式

printf("\n");

forder(root); printf("\n"); // 遞迴先序遍歷二叉樹

inorder(root); printf("\n"); // 遞迴中序遍歷二叉樹,可得到公升序序列

lastorder(root); printf("\n"); // 遞迴後序遍歷二叉樹

forder2(root); printf("\n"); // 非遞迴先序遍歷二叉樹

return 0;

} btnode * creattree(int a, int n)

if(pa->data > p->data)else

} return root;

} /*

malloc:

函式原型:void *malloc(unsigned int num_bytes); 

分配長度為num_bytes位元組的記憶體塊

作用:當無法知道記憶體具體的位置時,想要繫結真正的記憶體空間,就要用到malloc()函式

同時也利用了記憶體的碎片記憶體*/

// 遞迴先序遍歷二叉樹 (根左右)

void forder(btnode * root)

} // 遞迴中序遍歷二叉樹 (左根右)

void inorder(btnode * root)

} // 遞迴後序遍歷二叉樹 (左右根)

void lastorder(btnode * root)

} // 非遞迴先序遍歷

void forder2(btnode * root)

free(s); // 釋放棧,因為malloc分配的空間需要自己釋放。

}

基本思想:根結點先入棧從根結點一直向左走,走的過程入棧,直到左子樹為空則訪問。然後退棧,檢視是否有右指標,若有則以其為根再找最左下結點,否則訪問

基本思想:把先序的輸出放在後面,剛開始初始化時入棧三個,乙個是根,乙個是根的右,乙個是根的左。

二叉樹的建立和遞迴遍歷 非遞迴遍歷操作

二叉樹是我們平時使用較多的一種資料結構,它是每個節點最多有兩個子樹的樹結構。關於樹的概念和性質就不再多介紹,我來對數的建立和一些操作進行總結。首先我們定義樹的資料型別 typedef struct tree node tree node 樹有乙個資料域和兩個指標域,採用的是鏈式儲存結構 我們定義乙個...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

C 二叉樹的建立,遍歷(遞迴,非遞迴)

include include define maxsize 20 typedef struct bitnodebitnode,bitree 浜屽弶鏍戠殑閫掑綊寤虹珛 inti 0 bitree create bitree t,char s else else return t 涓 簭閬嶅巻 voi...