實現了樹的兄弟孩子表示法,插入新資料,查詢某個資料,前序遍歷,中序遍歷,後序遍歷。
每一棵樹都有乙個根節點。
每個節點可以有多個兒子節點,沒有兒子的結點叫做葉子節點。
具有相同父親的節點叫做兄弟節點。
對於任意乙個節點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條邊。這裡寫...