資料結構 樹與二叉樹 (C )

2021-09-20 10:30:50 字數 2124 閱讀 5584

一. 樹的基本概念

(tree)是n(n>=0)個結點的有限集。它有唯一的(1結點)和若干顆互不相交的子樹(如圖上子樹5、11、12等)組成。

接下來以上面樹為例子介紹樹的基本術語。

二. 樹的儲存結構

順序儲存結構

假設以一組連續空間儲存數的結點,同時在每個結點中,附設乙個指示器指示其雙親結點到鍊錶中的位置。

示意圖

**實現

/* 樹的雙親表法結點結構定義*/

#define max_tree_size 100

typedef int elemetype;

typedef struct ptnodeptnode;

typedef struct ptree;

特點

鏈式儲存結構

//二叉樹鏈式儲存結構定義 

typedef struct btnodebtnode;

三. 二叉樹的遍歷

//二叉樹先序遍歷 - 遞迴 

void preorder(btnode *p)

}//二叉樹中序遍歷 - 遞迴

void inorder(btnode *p)

}//二叉樹中後序遍歷 - 遞迴

void postorder(btnode *p)

}

四. 構造二叉樹根據 先序遍歷 + 中序遍歷 或 中序遍歷 + 後序遍歷 可以構造乙個二叉樹:

//根據前序序列,中序序列構造二叉樹 

//引數:前序序列 中序序列 序列長度

btnode *createbt(elemtype *pre, elemtype *in, int n)

五.求結點數

//計算二叉樹的結點數 

int nodenum(btnode *p)

//計算二叉樹的葉子結點數

int lastnodenum(btnode *p)

else

return 0;

}

#include #include using namespace std; 

typedef char elemtype ;

//二叉樹鏈式儲存結構定義

typedef struct btnodebtnode;

//根據前序序列,中序序列構造二叉樹

//引數:前序序列 中序序列 序列長度

btnode *createbt(elemtype *pre, elemtype *in, int n)

//訪問函式

void visit(btnode *p)

//二叉樹先序遍歷 - 遞迴

void preorder(btnode *p)

}//二叉樹中序遍歷 - 遞迴

void inorder(btnode *p)

}//二叉樹中後序遍歷 - 遞迴

資料結構 樹與二叉樹

一 性質 1 在二叉樹中,第i層的結點總數不超過2 i 1 2 深度為h的二叉樹最多有2 h 1個結點 h 1 最少有h個結點 3 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4 具有n個結點的完全二叉樹的深度為int log2n 1 5 給定n個節點,能...

資料結構 樹與二叉樹

1 樹的定義 樹是一種 非線性的資料結構。樹是n n 0 個結點的有限集,在任意一棵非空樹中 1 有且僅有乙個特定的被稱為 根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是一棵樹,並且稱為根的 子樹 subtree 3 每棵子樹也是由唯一的根結...

資料結構 樹與二叉樹

樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的子樹 subtree 特點...