《洋蔥》: 如果你願意一層一層的剝開我的心
會發現 會流淚 我就是你失散多年的二叉樹啊~
幾個要點:
1.來自: lm_whales
struct *** *p = //結構體指標型別2.來自:2023年資料結構聯考複習指導(struct *** *) //強制轉換成結構體指標型別
malloc(
sizeof(struct ***) //結構體的大小
);
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...