新手向树及其基本操作的代码实现(C++)

在这里插入图片描述
树不同于链表,栈,树是一种非线性结构。

树是一种层级结构,最顶部的节点叫做根。每个节点都有数据,还有可能有指向其他节点的地址。

术语:
根;子节点;父节点;叶节点;内部节点;兄弟节点;深度:节点距离根的距离;高度:从结点x向下到某个叶结点最长简单路径中边的条数;
二叉树:每个节点最多有两个子节点。

二叉搜索树


性质:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

二叉树的实现(插入,搜索)

#include<iostream>
#include<stack>//STL
using namespace std;

struct BstNode {
   
    int data;
    BstNode* left;
    BstNode* right;
};

BstNode* GetNewNode(int data){
   
    BstNode* newNode = new BstNode();
    newNode->data = data;
    return newNode;
}

BstNode* Insert(BstNode* root,int data){
   
    if(root == NULL){
   
        //当树为空树
        root = GetNewNode(data);
    }else{
   
        if(data <= root->data){
   
            root->left = Insert(root->left,data);
        }
        if(data > root->data){
   
            root->right = Insert(root->right,data);
        }
    }
    return root;
}

bool Search(BstNode* root,int data){
   
    if(root == NULL) return false;
    if(root->data == data) return true;
    if(data <= root->data) return Search(root->left,data);
    if(data > root->data) return Search(root->right,data);
}

int main(){
   
    BstNode* Root = NULL;
    Root = Insert(Root,15);
    Root = Insert(Root,10);
    Root = Insert(Root,20);
    Root = Insert(Root,17);
    Root = Insert(Root,28);
    int x;
    cin>>x;
    cout<<Search(Root,x)<<endl;
}

运行结果:
在这里插入图片描述

查找最大,最小值

#include<iostream>
#include<stack>//STL
using namespace std;

struct BstNode {
   
    int data;
    BstNode* left;
    BstNode* right;
};

BstNode* GetNewNode(int data){
   
    BstNode* newNode = new BstNode();
    newNode->data = data;
    return newNode;
}

BstNode* Insert(BstNode* root,int data){
   
    if(root == NULL){
   
        //当树为空树
        root = GetNewNode(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值