1、樹的概念
樹形結構是節點之間以及分支關係定義的層次結構。作為一種重要的非線性結構,樹形結構中乙個節點最多只有乙個前驅節點,但是可以有多個後繼節點。
2、樹的儲存結構
在計算機中,樹有多種的儲存方式,下面介紹一種動態的「左子/右兄」二叉鍊錶表示方法。
#include "mytree.h"
#include using namespace std;
#define ok (0)
#define error (-1)
#define max_name_len (50) //最大的名字長度
/*樹結構體中資料成員*/
typedef struct _elementtype
elementtype;
/*樹節點結構體*/
typedef struct _treenode
treenode;
/*樹結構體*/
typedef struct _ctree
ctree;
/*全域性資料儲存樹資訊*/
ctree g_tree;
/** 功能:檢測結點的index是否正確
* 入參:要檢測的結點index
* 返回值:合法index返回true,不合法的index返回false
*/static bool mytree_check_node_index(const int index)
} return false;}/*
* 功能:獲取指定的結點指標
* 入參:父節點,比較引數index,出參nodeinfo
* 返回值:na
*/void mytree_preorder_get_node(treenode *tree, int index, treenode *nodeinfo)
mytree_preorder_get_node(tree->firstchild, index, nodeinfo);
mytree_preorder_get_node(tree->nextsibing, index, nodeinfo); }
return ;}/*
* 功能:通過結點的index獲取結點的指標資訊
* 入參:查詢結點的index
* 返回值:成功返回指向結點的指標,不成功返回null
*/treenode *mytree_get_node_by_index(const int index)
root = g_tree.root;
//遍歷當前的樹,返回指定結點的指標
mytree_preorder_get_node(root, index, tmpnode);
return tmpnode;}/*
* 功能:設定乙個孩子到樹中
* 入參:parentindex: 父節點的index
element :孩子結點的資訊
* 返回值:插入成功返回0, 失敗返回-1
*/int mytree_set_child(int parentindex, int index, elementtype element)
parentnode = mytree_get_node_by_index(parentindex);
if (null == parentnode)
//lastchild = mytree_get_last_child(parentnode);
newnode = (treenode *)malloc(sizeof(treenode));
if(null == newnode)
memset(newnode, 0, sizeof(treenode));
newnode->index = index;
newnode->element.id = element.id;
memcpy(newnode->element.name, element.name, max_name_len);
g_tree.nodeindexs.push_back(index);
g_tree.num++;
if (null == parentnode->firstchild)
if(null == parentnode->nextsibing)
head = parentnode->nextsibing;
while(head)
lastchild->nextsibing = newnode;
return ok;}/*
* 功能:設定乙個樹的根節點
* 入參: element :根結點的資訊
* 返回值:插入成功返回0, 失敗返回-1
*/int mytree_set_root( elementtype element)
memset(newnode, 0, sizeof(treenode));
newnode->index = 0;//根節點index
newnode->firstchild = null;
newnode->nextsibing = null;
newnode->element.id = element.id;
memcpy(newnode->element.name, element.name, max_name_len);
g_tree.nodeindexs.push_back(0);
g_tree.num++;
g_tree.root = newnode;
return ok;}/*
* 功能:初始化當前樹
* 入參:無
* 返回值:無
*/void mytree_init()
/** 功能:獲取指定的結點指標
* 入參:父節點,比較引數index,出參nodeinfo
* 返回值:na
*/void mytree_preorder_visit(treenode *tree)
return ;}/*
* 功能:列印整個樹的結點
* 入參:父節點,比較引數index,出參nodeinfo
* 返回值:na
*/void mytree_dump()
/** 功能:建立一棵樹
* 入參:無
* 返回值:無
*/void mytree_create()
/** 功能:測試當前樹結構
* 入參:無
* 返回值:無
*/void tree_test()
資料結構(C語言)樹的儲存結構
1 雙親表示法 實現 定義結構陣列,存放樹的結點,每個結點包含兩個域 資料域 存放結點本身資訊 雙親域 指示本結點的雙親結點在陣列中的位置 陣列下標 data parent0r 11a0 2b03 c04d 15e1 6f37 h68h 69k6 特點 找雙親容易,找孩子難 實現 typedef s...
資料結構 樹 C語言 堆
include include typedef struct heapstruct pheap pheap為結構指標,指向這個結構 struct heapstruct typedef pheap maxheap typedef pheap minheap define maxdata 1000 de...
資料結構 C語言 之樹
所謂二叉樹就是只具有0,1,2三種度的一顆樹 前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹為空則結束返回,否則 1 訪問根結點。2 前序遍歷左子樹。3 前序遍歷右子樹 需要注意的是 遍歷左右子樹時仍然採用前序遍歷...