二叉树,二叉搜索树的创建(C++)

本文介绍了二叉树的基本概念,包括其性质、满二叉树和完全二叉树的定义。接着讲解了二叉查找树,这是一种特殊的二叉树,每个节点的键值遵循特定规则。还提供了创建二叉查找树的C++代码示例,并展示了中序遍历的方法。
摘要由CSDN通过智能技术生成

二叉树:

每个结点最多有两个子树的结构

二叉树的性质:

1、二叉树的第i层上的节点数目最多为2{i-1},(i>=1

2、深度为k的二叉树至多有2{k}-1个结点(k>=1)

3、包含n个结点的二叉树的高度至少为log2(n+1)

4、在任意一颗二叉树中,若终端结点的个数为n0,

度为2的节点数为n2,则n0=n2+1

满二叉树

每一层的节点都达到了最大值就是满二叉树

 

完全二叉树

在一颗二叉树中,只有下面的两层结点的度可以小于2并且最下面一层的叶子结点集中在靠左的位置上,这样的二叉树叫做完全二叉树。

 

二叉查找树:

定义:
       二叉查找树中的每一个结点都对应一个唯一的键值,并且每个键大于左子树上任意结点的键,小于右子树上任意结点的键。

二叉查找树特点

1、若任意节点的左子树不空,则左子树上所有节点的值均小于他根节点的值

2、任意节点的右子树不为空,则右子树上所有节点的值均大于他根节点的值。

3、任意结点的左右子树也分别为二叉查找树

4、没有键值相等的结点

创建二叉查找树代码

头文件类

#pragma once
#include<iostream>
#include<vector>
using namespace std;

struct Node
{
    int key;
    Node* left = nullptr;
    Node* right = nullptr;
    Node(int key)
    {
        this->key = key;
    }
};

class Tree
{
private:
    Node* root = nullptr;
public:
    Tree(vector<int> vec);
    Node* getroot();
    void InorderTree(Node* root);
};

类外实现创建二叉搜索树函数

#include "Tree.h"
Tree::Tree(vector<int> vec)
{
    if(root == nullptr) root = new Node(vec[0]);
    for(int i = 1; i < vec.size(); i++)
    {
        Node* p = root;
        Node* newnode = new Node(vec[i]);
        while(1)
        {
            if(p->key>vec[i])
            {
                if(p->left == nullptr)
                {
                    p->left = newnode;
                    break;
                }
                p = p->left;
            }
            else if(p->key < vec[i])
            {
                if(p->right == nullptr)
                {
                    p->right = newnode;
                    break;
                }
                p = p->right;
            }
            else
            {
                cout << "不允许出现重复值" << endl;
                return;
            }
        }
    }
}

Node* Tree::getroot()
{
    return root;
}

void Tree :: InorderTree(Node* root)
{
    if(root == nullptr) return;
    InorderTree(root->left);
    cout << root->key << " ";
    InorderTree(root->right);
}

主函数

#include"Tree.h"
int main()
{
    vector<int> vec{9,6,11,25,44,33};
    Tree t(vec);
    Node* p = t.getroot();
    t.InorderTree(p);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瑞不会C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值