如何逐層建立一棵滿二叉樹?

2021-07-22 15:01:37 字數 1382 閱讀 7451

《洋蔥》: 如果你願意一層一層的剝開我的心

會發現 會流淚 我就是你失散多年的二叉樹啊~

幾個要點:

1.來自: lm_whales

struct *** *p = //結構體指標型別

(struct *** *) //強制轉換成結構體指標型別

malloc(

sizeof(struct ***) //結構體的大小

);

2.來自:2023年資料結構聯考複習指導

n個結點的滿二叉樹,約定編號從根結點起(根結點編號為1),自上而下,自左向右,每個結點對應乙個編號,對於編號為i的結點,如果有雙親,則其雙親結點為┕ i/2 ┙(下取整),如果有左孩子,則左孩子為2i,如果有右孩子,則右孩子為2i+1。

3.

所謂的逐層建立滿二叉樹,就是定義乙個有左、右孩子指標和資料域的結點,然後把該結點填充進乙個陣列裡,每次迭代修改結點的左右孩子指標,所按照的規則就是前面所說的結點編號的規則。為實現迭代修改,需要兩個計數器i和j,i用來記錄結點編號,j則是在每次修改右孩子指標的時候+1。比如:i=3的結點處j=3mod2=1, 即下一層的父結點。

下面是具體實現的**

structlib.h

#include 

#include

#include

#include

//自定義型別

typedef

char elemtype;

//定義線索二叉樹結構

typedef

struct threadthread, *threadpoint;

main.c

#include "structlib.h"

int len;

int i=0,j=0; //次數

threadpoint tp[1024];

//操作結果:層次遍歷構造二叉樹

int createbinarytree(elemtype *branch)

if (i % 2 == 0 && i != 0)

else

if (i % 2 == 1)

if (i == (len - 1))

i++; //為了上面的模運算 我也是拼了

createbinarytree(branch + 1); //遞迴唄

}//訪問當前結點

void visit(threadpoint tp)

void main()

printf("\n");

}

建立一棵二叉樹 輸出前序

洛谷 p1305 輸入一串二叉樹,用遍歷前序打出。第一行為二叉樹的節點數n。n leq 26n 26 後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 6abc bdicj d i j 輸出 abdicj 思路 建立乙個節點包含父節點 左兒子 右兒子 的節點 有父節點可以判斷誰...

判斷一棵樹是否為滿二叉樹

首先,我們要知道什麼是滿二叉樹。乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解。那麼,我們要怎麼判斷一棵樹是否為滿二叉樹呢?思路 在層序遍歷的過程中,找到第乙個非滿節點 non full node 滿節點 full node 指的是同時擁有左右孩子的節點。在找到第乙個非滿...

翻轉一棵二叉樹

問題描述 翻轉一棵二叉樹 示例 輸入 4 2 7 1 3 6 9輸出 4 7 2 9 6 3 1 解法 1.用遞迴來解決 2.首先判斷根是不是空 遞迴出口 3.如果不是空則交換左右子數 4.對左子樹進行遞迴 5.對右子樹進行遞迴 definition for a binary tree node.c...