其他分享
首页 > 其他分享> > 数据结构—树

数据结构—树

作者:互联网

基本概念

二叉树:

根-左子树-右子树

二叉树的性质:

特殊二叉树

森林、树、二叉树

  1. 一般树转化为二叉树:
    左孩子,右兄弟结构

  2. 树与森林
    树=根+子树森林

二叉树的存储

struct BiNode{
	int data;
	struct BiNode* lchild, rchild;
};

typedef struct BiNode* Tree;

int Init(Tree &T)
{
	T = nullptr;
	return 0;
}

二叉树的遍历

先序遍历:

void PreSearch(BiTree T)
{
	if (T == nullptr)
		return;
	
	cout << T -> data << ' ';
	PreSearch(T -> lchild);
	PreSearch(T -> rchild);
	
}

中序遍历:

void InSearch(Tree T)
{
	if (T == nullptr);
		return;
	
	InSearch(T -> lchild);
	cout << T -> data << ' ';
	InSearch(T -> rchild);
}

后序遍历

void SucSearch(Tree T)
{
	if (T == nullptr)
		return;
	
	SucSearch(T -> lchild);
	SucSearch(T -> rchild);
	cout << T -> data << ' ';
	
}

层序遍历

void CenSearch(Tree T)
{
	queue<int> q;
	if (T != nullptr)
		q.push_back(T);

	while (!q.empty()){
		auto it = q.front();
		q.pop();


		if (it -> rchild != nullptr)
			q.push_back(it -> rchild);
		if (it -> lchild != nullptr)
			q.push_back(it -> lchild);
	}
}

应用:

  1. 求树的深度
int Get_depth(Tree T)
{
	if (T == nullptr)
		return 0;

	return max(Get_depth(T -> lchild), Get_depth(T -> rchild)) + 1;
}
  1. 求结点总数
int Get_num(Tree T)
{
	if (T == nullptr)
		return 0;
	return Get_num(T -> lchild) + Get_num(T -> rchild) + 1;
}
  1. 确定一个二叉树

标签:lchild,结点,return,nullptr,二叉树,rchild,数据结构
来源: https://www.cnblogs.com/lhqwd/p/15769577.html