构建二叉搜索树及基本操作

简介: 构建二叉搜索树及基本操作

二叉搜索树具有下列性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
在二叉搜索树的基础上,如果进行一次中序遍历,则会正好会把节点的权值从小到大搜一遍。

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

struct Node{
   //节点 
    int data;
    Node *left;
    Node *right;
};
struct Tree{
   //树 
    Node *root;
};

//先序遍历(dfs遍历)
void preorder(Node *node)
{
   
    if (node!=NULL){
   
        cout<<node->data<<endl;
        preorder(node->left);
        preorder(node->right);
    }
}


//中序遍历-->正好是从小到大排序 
void inorder(Node *node)
{
   
    if (node!=NULL){
   
        inorder(node->left);
        cout<<node->data<<endl;
        inorder(node->right);
    }
} 


//后序遍历
void postorder(Node *node)
{
   
    if (node!=NULL){
   
        postorder(node->left);
        postorder(node->right);
        cout<<node->data<<endl;
    }
}


//插入节点
void insert_node(Tree *tree, int value)
{
   
    Node *node=(Node *)malloc(sizeof(Node));
    node->data=value;
    node->left=NULL;
    node->right=NULL; 

    if (tree->root==NULL){
   
        tree->root=node;
    }else{
   
        Node *tmp=tree->root;
        while (tmp!=NULL){
   
            if (value<tmp->data){
   
                if (tmp->left==NULL){
   
                    tmp->left=node;
                    return;
                }else{
   
                    tmp=tmp->left;
                }
            }else{
   
                if (tmp->right==NULL){
   
                    tmp->right=node;
                    return;
                }else{
   
                    tmp=tmp->right;
                }
            }
        }
    }
} 


//求树的高度
int get_height(Node *node)
{
   
    if (node==NULL){
   
        return 0;
    }else{
   
        int left_h=get_height(node->left);
        int right_h=get_height(node->right);
        int max_height=max(left_h, right_h);
        return max_height+1;
    }
}


//最大值
int get_max(Node *node)
{
   
    if (node==NULL)
        return -1;
    else{
   
        int max_left=get_max(node->left);
        int max_right=get_max(node->right);
        int max_this=node->data;
        int maxx=max_left;
        if (max_right>maxx)    maxx=max_right;
        if (max_this>maxx)    maxx=max_this;
        return maxx;
    }
} 
int main()
{
   
    int a[10]={
   6,3,8,2,5,1,7};
    Tree tree;
    tree.root=NULL;
    for (int i=0; i<=6; i++){
   
        insert_node(&tree, a[i]);
    }
    preorder(tree.root);
    cout<<endl<<endl;
    int height=get_height(tree.root);
    cout<<height<<endl;
    int maxx=get_max(tree.root);
    cout<<maxx<<endl; 
    return 0;
}
相关文章
|
8月前
|
人工智能 数据可视化 Ubuntu
保姆级教程:OpenClaw(Clawdbot)阿里云及本地部署指南,解锁多Agent协同高阶玩法
OpenClaw(原Clawdbot)作为开源AI执行框架的核心代表,在2026年迎来重要升级——MiniMax推出的变体MaxClaw将6套专业Agent与OpenClaw深度融合,实现了从单一工具到多智能体协同的跨越。不同于传统聊天机器人,OpenClaw的核心价值在于任务自动化执行与多场景适配,无论是阿里云服务器7×24小时稳定运行,还是本地隐私化部署,都能通过技能扩展与Agent协作,完成热点追踪、行业研报撰写、数据可视化等复杂任务。
4305 0
|
10月前
|
人工智能 安全 API
AI 大语言模型(LLM)API 调用进阶:从闭源大模型 LLM API 到开源大模型 API 本地部署,接入路径全解析
在 2026 年的今天,大模型(LLM)已经成为开发者的标配工具。但面对 OpenAI、国产模型、本地部署等多种技术路径,开发者该如何抉择?本文将从工程实践角度,深入剖析国际主流 API、国产 API、本地开源部署以及聚合 API 四种主流方案的优劣,并提供完整的 Python 实战代码,助你构建最优的 AI 应用架构。
3667 5
|
存储 人工智能 安全
有奖体验 AI 模特换装,解锁电商视觉新体验
有奖体验 AI 模特换装,解锁电商视觉新体验
有奖体验 AI 模特换装,解锁电商视觉新体验
|
存储 JavaScript 前端开发
基于SpringBoot+vue的校园招聘系统
基于SpringBoot+vue的校园招聘系统
基于SpringBoot+vue的校园招聘系统
|
测试技术 C语言
C语言中的void函数
C语言中的void函数
2457 1
|
移动开发 JavaScript Java
软件测试用例经典方法 | 单元测试法案例
单元测试又称模块测试,是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验,检查程序在语法、格式和逻辑上的错误,并验证程序是否符合规范,以发现单元内部可能存在的各种缺陷。
1170 0
软件测试用例经典方法 | 单元测试法案例
|
机器学习/深度学习 缓存 自然语言处理
PyTorch使用Tricks:梯度裁剪-防止梯度爆炸或梯度消失 !!
PyTorch使用Tricks:梯度裁剪-防止梯度爆炸或梯度消失 !!
1911 0
|
小程序 前端开发 Java
记录一次部署微信小程序的过程并上线微信小程序
记录一次部署微信小程序的过程并上线微信小程序
1329 1
记录一次部署微信小程序的过程并上线微信小程序
Linux内核26-ARM的WFI和WFE指令
Linux内核26-ARM的WFI和WFE指令

热门文章

最新文章