- 樹是一種非線性數據結構
樹是由 n(n>=0) 個節點組成的有限集合node
- 若是 n = 0, 稱爲空樹;
若是 n > 0, 則:編程
- 有一個特定的稱之爲根(root)的節點
- 根節點只有直接後繼,但沒有直接前驅
- 除根之外的其它節點劃分爲m(m>=0)個互不相交的有限集合T
0
,T1
,...,Tm-1
,每一個集合又是一顆樹,而且稱之爲根的子樹(sub tree)
- 樹的節點包含一個數據及若干指向子樹的分支
節點擁有的子樹數目稱爲節點的度數據結構
- 度爲 0 的節點稱爲葉節點
- 度不爲 0 的節點稱爲分支節點
- 樹的度定義爲全部節點中度的最大值
度爲 3 的樹
節點的直接後繼稱爲該節點的孩子spa
- 相應的,該節點稱爲孩子的雙親
節點的孩子的孩子的......稱爲該節點的子孫指針
- 相應的,該節點稱爲子孫的祖先
- 同一個雙親的孩子之間互稱爲兄弟
樹中節點的最大層次稱爲樹的深度或高度code
若是樹中節點的各子樹從左到右是有次序的,子樹之間不能互換位置,則稱爲該樹爲有序樹,不然爲無序樹。blog
- 森林是由 n(n>=0) 顆互不相交的樹組成的集合
- 將元素插入數中
- 將元素從樹中刪除
- 在樹中查找元素
- 獲取樹的節點數
- 獲取數的高度
- 獲取數的度
- 清空數的元素
。。。rem
數在程序中表現爲一種特殊的數據類型
template <typename T> class Tree : public Object { public: Tree() { m_root = NULL; } virtual bool insert(TreeNode<T> *node) = 0; virtual bool insert(const T &value, TreeNode<T> *parent) = 0; virtual SharedPointer<Tree<T>> remove(const T &value) = 0; virtual SharedPointer<Tree<T>> remove(TreeNode<T> *node) = 0; virtual TreeNode<T>* find(const T &value) const = 0; virtual TreeNode<T>* find(TreeNode<T> *node) const = 0; virtual TreeNode<T>* root() const = 0; virtual int degree() const = 0; virtual int count() const = 0; virtual int height() const = 0; virtual void clear() = 0; protected: TreeNode<T> *m_root; };
樹中的節點也表現爲一種特殊的數據類型
template <typename T> class TreeNode : public Object { public: T value; TreeNode<T> *parent; TreeNode() { parent = NULL; } virtual ~TreeNode() = 0; };
文件:TreeNode.hit
#ifndef TREENODE_H #define TREENODE_H #include "Object.h" namespace DTLib { template <typename T> class TreeNode : public Object { public: T value; TreeNode<T> *parent = nullptr; virtual ~TreeNode() = 0; }; template <typename T> TreeNode<T>::~TreeNode() { } } #endif // TREENODE_H
文件:Tree.hclass
#ifndef TREE_H #define TREE_H #include "Object.h" #include "TreeNode.h" #include "SharedPointer.h" namespace DTLib { template <typename T> class Tree : public Object { public: Tree() = default; virtual bool insert(TreeNode<T> *node) = 0; virtual bool insert(const T &value, TreeNode<T> *parent) = 0; virtual SharedPointer<Tree<T>> remove(const T &value) = 0; virtual SharedPointer<Tree<T>> remove(TreeNode<T> *node) = 0; virtual TreeNode<T>* find(const T &value) const = 0; virtual TreeNode<T>* find(TreeNode<T> *node) const = 0; virtual TreeNode<T>* root() const = 0; virtual int degree() const = 0; virtual int count() const = 0; virtual int height() const = 0; virtual void clear() = 0; protected: TreeNode<T> *m_root = nullptr; }; } #endif // TREE_H
- 樹是一種特殊的數據結構
- 節點擁有惟一前驅(父節點)和若干後繼(子節點)
- 樹的節點包含一個數據及若干指向其它節點的指針
- 樹與節點在程序中表現爲特殊的數據類型
以上內容整理於狄泰軟件學院系列課程,請你們保護原創!