平衡二叉树首先是一棵二叉排序树
二叉排序树:对于每个节点,左孩子比本身小,右孩子比本身大
首先我们来实现一个二叉排序树。
//节点结构体
struct TreeNode{
int val; //节点值
TreeNode* left;
TreeNode* right;
TreeNode(int val){
//结构体构造方法
this->val = val;
this->left=NULL;
this->right=NULL;
}
};
然后是二叉排序树的插入算法
TreeNode* insert1(TreeNode* root,int val){
if(root==NULL){
root =new TreeNode(val);
return root;
}
int temp = root->val;
if(val<temp){
root->left = insert1(root->left,val);
}
if(val>temp){
root->right = insert1(root->right,val);
}
return root;
}
很简单,就是如果节点为NULL,就新建节点
否则跟节点进行比较,如果比节点值小就向左子树递归,否则向右子树递归
二叉排序树的查找平均时间复杂度:O(lgn)
平均插入时间复杂度:O(lgn)