您的位置:首页 > 编程语言 > C语言/C++

二叉树的C++实现

2015-08-13 18:16 405 查看
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
= { 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: