0.简介
本篇博客是为面平衡二叉树,B树,红黑树铺垫,所以这里就简单实现创建一个树。
1.创建树
代码中有详细注释,就不再写多余的句子了。
这个树的创建是根据左小右大的顺序建成。
#include<iostream>
#include <algorithm>
using namespace std;
struct TreeNode
{
int num = 0;
int height = 0;
TreeNode* left = nullptr;
TreeNode* right = nullptr;
TreeNode* parent = nullptr;
};
TreeNode* addNode(TreeNode*root,int num)
{
//如果是空节点的时候,则创建新节点
if (root == nullptr)
{
root = new TreeNode;
root->num = num;
root->height = 1;
return root;
}
//计算树高
int lefth = 0, righth = 0;
if (root->left != nullptr)
lefth = root->left->height;
if (root->right != nullptr)
righth = root->right->height;
if (num > root->num)
{
//添加一个结点
root->right = addNode(root->right, num);
//获取当前分支树高
righth = root->right->height;
//父节点赋值
root->right->parent = root;
}
else
{
//添加一个结点
root->left = addNode(root->left, num);
//父节点赋值
root->right->left = root;
//获取当点分支树高
lefth = root->left->height;
}
//树高计算
root->height = max(lefth ,righth) + 1;
return root;
}
int main()
{
TreeNode* root = nullptr;
root = addNode(root, 10);
addNode(root, 12);
addNode(root, 14);
addNode(root, 20);
addNode(root, 21);
cout << root->height << endl;
return 0;
}