二叉樹 二叉樹的相關操作

2021-10-11 14:32:50 字數 1713 閱讀 7098

遞迴實現:

建立求樹高

求葉子數

求節點數

統計度為2的結點個數

後序輸出 先序輸出 中序輸出

交換左右子樹

#include

#include

#include

#define true 1

#define false 0

#define ok 1

#define error 0

#define overflow -1

#define null 0

typedef

int status;

// 二叉樹儲存結構定義

// 二叉鍊錶儲存結構

typedef

int telemtype;

typedef

struct bitnodebitnode,

*bitree;

// 建立二叉樹

// 輸入0 代表建立空樹

// 遞迴建立

// 遞迴邊界:建立空樹

// 遞迴關係:建立非空樹,先建立根節點(輸入數值),再建立左子樹,最後建立右子樹

status createbitree

(bitree& t)

return ok;

}// 求樹高

// 如果是空樹,返回0

// 遞迴求樹高

// 遞迴邊界:當前樹為空

// 遞迴關係:返回當前節點 左右子樹中更高的+1 (根節點)

intgetdepthofbitree

(bitree t)

}// 求葉子節點數

// 如果是空樹 返回0

// 遞迴求葉子數

// 遞迴邊界:當前節點左右子樹為空,返回1

// 遞迴關係:左子樹葉子數 + 右子樹葉子數

intleafcount

(bitree t)

// 計算二叉樹中的節點個數

// 如果是空樹 返回0

// 遞迴求節點數

// 遞迴邊界:當前樹為空

// 遞迴關係:左子樹結點數 + 右子樹結點數 + 1(根節點)

int nodecountofbitree ( bitree t)

// 統計度為2的結點個數

// 如果樹為空 返回0

// 遞迴求

// 遞迴邊界:樹為空

// 遞迴關係:左右子樹都存在,返回 1+遞迴;乙個或不存在 返回 遞迴

int nodecount ( bitree t)

// 左右子樹交換

// 如果樹為空,直接返回

// 遞迴交換

// 遞迴邊界:樹為空

// 遞迴關係:遞迴交換左右子樹

void

exchangetree

(bitree& t)

}// 後序輸出

// 遞迴邊界:數為空,直接返回

// 遞迴關係:依次遞迴遍歷左子樹、右子樹

void

postorder

(bitree t)

}// 先序輸出

void

preorder

(bitree t)

}// 中序輸出

void

inorder

(bitree t)

}int

main()

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...