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

1、概念:

1.分类:

         

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

2.关键词:

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

             

3.遍历:

                                                              

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

4、二叉树遍历:

#include<stdio.h>
#include<Windows.h>

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 T>
class TreeNode {
public:
	T element;					//当前节点存储的数据			
	TreeNode<T>* pLeft;					//指向左子节点的指针			
	TreeNode<T>* pRight;					//指向右子节点的指针			

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

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

template<class T>
BSortTree<T>::BSortTree()
{
	Init();
}
template<class T>
BSortTree<T>::~BSortTree() 
{
	printf("Destory function...\n");
	Destory(m_p
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值