树
链表实现二叉树
头文件
// 二叉树的链表存储
#include <iostream>
using namespace std;
enum status{OK = 1, ERROR = 0};
typedef int elemType;
// 二叉树(根节点)
typedef struct TreeNode* BinTree;
// 树节点存储结构
struct TreeNode
{
elemType data;
TreeNode* leftChild;
TreeNode* rightChild;
};
//----------------------------------------初始化----------------------------------------//
status InitBiTree(BinTree &t)
{
t = nullptr;
return OK;
}
//----------------------------------------先序创建二叉树----------------------------------------//
status CreateBiTree(BinTree &t)
{
int data;
cin >> data;
if(data == 0)
{
t = nullptr;
cout << "--------------------------" << endl;
}
else
{
t = new TreeNode;
t->data = data;
cout << "请输入 " << t->data << " 的左孩子 : ";
CreateBiTree(t->leftChild);
cout << "请输入 " << t->data << " 的右孩子 : ";
CreateBiTree(t->rightChild);
}
}
//----------------------------------------先序遍历二叉树----------------------------------------//
status PreOrderTraverse(BinTree &t)
{
if(t != nullptr)
{
cout << t->data << " ";
PreOrderTraverse(t->leftChild);
PreOrderTraverse(t->rightChild);
}
}
//----------------------------------------深度----------------------------------------//
int Depth(BinTree &t)
{
if(t == nullptr)
return 0;
else
{
int Depth_L = Depth(t->leftChild);
int Depth_R = Depth(t->rightChild);
if(Depth_L >= Depth_R) return Depth_L + 1;
else return Depth_R + 1;
}
}
//----------------------------------------总结点数----------------------------------------//
int NodeSum(BinTree &t)
{
if(t == nullptr)
return 0;
else
{
int NodeSum_L = NodeSum(t->leftChild);
int NodeSum_R = NodeSum(t->rightChild);
return NodeSum_L + NodeSum_R + 1;
}
}
测试文件
#include <iostream>
#include "tree.hpp"
using namespace std;
int main()
{
BinTree t1;
InitBiTree(t1);
cout << "请输入根节点 : ";
CreateBiTree(t1);
cout << endl;
PreOrderTraverse(t1);
cout << endl << "树的深度为 : " << Depth(t1);
cout << endl << "树的总节点数为 : " << NodeSum(t1);
system("pause");
}
测试数据

测试结果
