資料結構 普通樹的定義與C 實現

2021-08-04 09:22:35 字數 1689 閱讀 9621

實現了樹的兄弟孩子表示法,插入新資料,查詢某個資料,前序遍歷,中序遍歷,後序遍歷。

每一棵樹都有乙個根節點。

每個節點可以有多個兒子節點,沒有兒子的結點叫做葉子節點。

具有相同父親的節點叫做兄弟節點。

對於任意乙個節點ni,ni的深度為從根到ni的唯一路徑的長。因此,根的深度是0。

ni的高是從ni到一片樹葉的最長路徑的長。因此葉子節點的高是0。一棵樹的高等於它的根的高。

一棵樹的深度等於它的最深的樹葉的深度,該深度等於這棵樹的高。

樹的實現:

使用樹的兄弟孩子表示法。

typedef struct streenode* pstreenode;

struct streenode

其中pfirstchild(左孩子節點)表示第乙個兒子節點,pnextbrother(右孩子節點)表示下乙個兄弟節點。

一顆普通樹表示如下:

使用兄弟孩子表示法表示如下:

樹的遍歷:

前序遍歷(先根節點,後左孩子節點,再右孩子結點)

中序遍歷(先左孩子結點,後根節點,再右孩子結點)

後序遍歷(先做孩子節點,後右孩子結點,再根節點)

**如下:

#include 

using namespace std;

typedef

struct streenode* pstreenode;

typedef

int treedatatype;

struct streenode

}; class ctree

;ctree::ctree()

ctree::ctree( treedatatype value )

ctree::~ctree()

void ctree::freememory( pstreenode pnode )

void ctree::insert( treedatatype parentvalue, treedatatype value )

else

}void ctree::insertbrother( pstreenode pbrothernode, treedatatype value )

}pstreenode ctree::search( pstreenode pnode, treedatatype value )

}else

return search( pnode->pnextbrother, value );

}}void ctree::preorder( pstreenode pnode )

void ctree::inorder( pstreenode pnode )

void ctree::postorder( pstreenode pnode )

int main()

執行結果如下:

資料結構 普通樹的定義與C 實現

每一棵樹都有乙個根節點。每個節點可以有多個兒子節點,沒有兒子的結點叫做葉子節點。具有相同父親的節點叫做兄弟節點。對於任意乙個節點ni,ni的深度為從根到ni的唯一路徑的長。因此,根的深度是0。ni的高是從ni到一片樹葉的最長路徑的長。因此葉子節點的高是0。一棵樹的高等於它的根的高。一棵樹的深度等於它...

C語言資料結構 樹的定義

樹是n個結點的有限集。n等於0是稱為空樹,在任意一棵非空樹中,有且僅有 乙個特定的稱為根的結 當n 1時,其餘節點可分為m m 0 個互不相交的有限集,其中每個集合本身又是一棵樹,並且稱為根的子樹。樹的結點包含乙個資料元素和n個指向其子樹的分支。結點擁有的子樹數稱為結點的度。度為0的結點稱為葉結點或...

資料結構 樹(定義)

樹定義 n n 0 個節點構成的有限集合。n 0時為空樹。樹的性質 樹中有乙個稱為 根 root 個互不相交的有限集t1,t2,tm,其中每個集合本身又是一棵樹,稱為原來樹的 子樹 subtree 注意 子樹是不相交的 除了根結點以外,每個結點有且僅有乙個父結點 一棵n個結點的樹有n 1條邊。這裡寫...