标签:rtu 操作 val 编程 parent 插入 move 特定 div
1. 树的定义
(1)树是一种非线性的数据结构
(2)树是由个结点组成的有限集合。如果n=0,称为空树。如果n>0,则:
①有一个特定的称之为根(root)的结点
②根结点只有直接后继,但没有直接前驱
③除根以外的其它结点划分为m(m≥0)个互不相交的有限集合T0、T1、…Tm-1,每个集合又是一棵树,并且称之为根的子树(sub tree)
(3)森林是由n(n≥0)棵互不相交的树组成的集合
2. 树中度的概念
(1)树中的结点包含一个数据及若干指向子树的分支
(2)结点拥有的子树数目称为结点的度(degree)
①度为0的结点称为叶结点
②度不为0的结点称为分支结点
(3)树的度定义为所有结点中度的最大值
①如图c中的A结点度为3,K结点度为0,H结点度为1等
②整棵树的度为3
3. 树中的前驱和后继
(1)结点的直接后继称为该结点的孩子。相应的,该结点称为孩子的双亲(如A为B、C、D的双亲,D为H、I、J的双亲。M叶结点无孩子)。
(2)结点的孩子的孩子的…称为该结点的子孙。相应的,该结点称为子孙的祖先。
(3)同一个双亲的孩子之间互称兄弟。(如K和L为兄弟)
4. 树中结点的层次
(1)根为第1层,根的孩子为第2层……
(2)树中结点的最大层次称为树的深度或高度。
5. 树的有序性
结点的各子树从左向右是有次序的,子树间不能互换位置,则称该树为有序树。否则为无序树。
6. 树和结点的数据结构
(1)树的数据结构(class Tree)【见编程实验】
(2)节点的数据结构(class TreeNode)【见编程实验】
【编程实验】树与结点抽象类的创建
//Tree.h
#ifndef _TREE_H_ #define _TREE_H_ #include "Object.h" #include "SharedPointer.h" namespace DTLib { //树结点的定义 template <typename T> class TreeNode : public Object { public: T value; TreeNode<T>* parent; TreeNode() { parent = NULL; } virtual ~TreeNode() = 0; }; template <typename T> TreeNode<T>::~TreeNode() { } //树的定义 template <typename T> class Tree : public Object { public: typedef TreeNode<T> Node; protected: Node* m_root; public: Tree(){m_root = NULL;} virtual bool insert(Node* node) = 0; //插入结点 virtual bool insert(const T& value, Node* parent) = 0; //删除节点(注意,返回被删除的子树!) virtual SharedPointer<Tree<T> > remove(const T& value) = 0; //删除结点 virtual SharedPointer<Tree<T> > remove(Node* node) = 0; virtual Node* find(const T& value) const = 0; //查找节点 virtual Node* find(Node* node) const = 0; virtual int degree() const = 0; //树的度 virtual int count() const = 0; //树的结点数目 virtual int height() const = 0; //树的高度 virtual void clear() = 0; //清空树 }; } #endif // _TREE_H_
7. 小结
(1)树是一种非线性的数据结构
(2)结点拥有唯一前驱(父结点)和若干后继(子结点)
(3)树的结点包含一个数据及若干指向其它结点的指针
(4)树与结点在程序中表现为特殊的数据类型
标签:rtu 操作 val 编程 parent 插入 move 特定 div
原文地址:http://www.cnblogs.com/5iedu/p/7748451.html