滴水逆向——C++_二叉树

1、概念:

1.分类:

滴水逆向——C++_二叉树_第1张图片     滴水逆向——C++_二叉树_第2张图片     滴水逆向——C++_二叉树_第3张图片

满二叉树:除叶子结点外, 所有结点都有两个结点, 叶子结点的left, right为NULL.
完全二叉树 : 除了最底层的叶子结点之外, 其余层全满, 而且叶子层集中在左端.堆是一种特殊的完全二叉树(全满或者差一个结点就全满)
平衡二叉树:所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。包括AVL树, 红黑树.
哈夫曼树:又称为最优二叉数,是一种带权路径最短的树。哈夫曼编码就是哈夫曼树的应用, 可以用来进行编码压缩.哈夫曼树的构造见哈夫曼树的构造
红黑树:具体见红黑树问题

2.关键词:

根节点
父节点
子节点
左子树
右子树
度:结点拥有的子树数目称为结点的度
深度/高度:树中结点的最大层次数

滴水逆向——C++_二叉树_第4张图片              滴水逆向——C++_二叉树_第5张图片

3.遍历:

                                                               滴水逆向——C++_二叉树_第6张图片

前序遍历(根 左 右):GDAFEMHZ
中序遍历(左 根 右):ADEFGHMZ
后序遍历(左 右 根):AEFDHZMG
广度优先遍历DFS : GDMAFHZE
深度优先遍历BFS : GDAFEMHZ

4、二叉树遍历:

#include
#include

class Monster
{
public:
	int ID;
	int Level;
	char Name[20];
public:
	Monster() {}
	Monster(int ID, int Level, char* Name)
	{
		this->ID = ID;
		this->Level = Level;
		memcpy(&this->Name, Name, strlen(Name) + 1);
	}
};

template
class TreeNode {
public:
	T element;					//当前节点存储的数据			
	TreeNode* pLeft;					//指向左子节点的指针			
	TreeNode* pRight;					//指向右子节点的指针			

	TreeNode(T& ele) {
		//初始化Node节点							
		memset(&element, 0, sizeof(TreeNode));
		//为元素赋值							
		memcpy(&element, &ele, sizeof(T));
		pLeft = pRight = NULL;
	}
};

template
class BSortTree {
public:
	BSortTree();					//构造函数			
	~BSortTree();					//析构函数			
public:
	void InOrderTraverse(TreeNode* pNode);					//中序遍历			
	void PreOrderTraverse(TreeNode* pNode);					//前序遍历			
	void PostOrderTraverse(TreeNode* pNode);					//后序遍历			
	TreeNode* GetRoot();					//返回根节点			
	int GetDepth(TreeNode* pNode);					//返回某个节点的高度/深度			
private:
	void Init();
	void Destory(TreeNode* pNode);
private:
	TreeNode* m_pRoot;					//根结点指针			
	int size;					//树中元素总个数			
};

template
BSortTree::BSortTree()
{
	Init();
}
template
BSortTree::~BSortTree() 
{
	printf("Destory function...\n");
	Destory(m_p

你可能感兴趣的:(滴水逆向——C++_二叉树)