二叉树的C++实现

1.二叉树构建的几种方法:

<1>基于数组的顺序存储结构的实现

#include<iostream>
using namespace std;
#define N 10

class treenode
{
	friend treenode* create(int val);
	friend void LstOrder(treenode*& node);
public:
	 treenode() :rightchild(nullptr), leftchild(nullptr){}
	~treenode(){}
	treenode*& getright()
	{
	   return rightchild;
	}
	treenode*& getleft()
	{
		return leftchild;
	}
private:
	int value;
	treenode* rightchild;
	treenode* leftchild;
};

treenode* create(int val)
{
	treenode* newnode = new treenode;
	newnode->value = val;
	newnode->leftchild = nullptr;
	newnode->rightchild = nullptr;
	return newnode;
}
int main()
{
	treenode* ptr[N] = { nullptr }; //建立一个存储节点地址的数组
	for (int i = 0; i < N; ++i)  //连续产生n个节点
		ptr[i]=create(i+1);
   //将n个节点按照层次顺序链接起来
	for (int i = 0; i < N / 2; ++i)
	{
		if (2 * i+1 < N)
			ptr[i]->getleft() = ptr[2*i+1];
		if (2 * i+2 < N)
			ptr[i]->getright() = ptr[2*i+2];
	}
	system("pause");
	return 0;
}
<2> 基于链表结构的构建

template<class T>
void tree<T>::createtree(treenode<T>*& node)  
{
	char temp;
	std::cout << "请输入:" << std::endl;
	std::cin >> temp;
	if (temp == '#')
		node = nullptr;
	else
	{
		node = new treenode < T > ;
		node->value = temp;
		createtree(node->leftchild);
		createtree(node->rightchild);
	}

}
2.二叉树的深度

template<class T>
int tree<T>::depth(treenode<T>*& node)
{
	if (node == nullptr)
		return 0;
	else
	{
		return 1 + max(depth(node->rightchild), depth(node->leftchild));
	}
}

int max(int s1, int s2)
{
	if (s1 > s2)
		return s1;
	else
		return s2;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值