首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一种二叉树插入方法C++

二叉树插入方法是指向二叉树中插入新节点的操作。在C++中,可以使用以下方法来实现二叉树的插入:

代码语言:txt
复制
#include <iostream>

// 定义二叉树节点结构
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

// 二叉树插入方法
TreeNode* insertNode(TreeNode* root, int value) {
    // 如果根节点为空,则创建新节点作为根节点
    if (root == nullptr) {
        return new TreeNode(value);
    }

    // 如果插入值小于当前节点值,则插入到左子树
    if (value < root->val) {
        root->left = insertNode(root->left, value);
    }
    // 如果插入值大于等于当前节点值,则插入到右子树
    else {
        root->right = insertNode(root->right, value);
    }

    return root;
}

// 中序遍历二叉树(用于验证插入结果)
void inorderTraversal(TreeNode* root) {
    if (root == nullptr) {
        return;
    }

    inorderTraversal(root->left);
    std::cout << root->val << " ";
    inorderTraversal(root->right);
}

int main() {
    // 创建一个示例二叉树
    TreeNode* root = new TreeNode(4);
    root->left = new TreeNode(2);
    root->right = new TreeNode(7);
    root->left->left = new TreeNode(1);
    root->left->right = new TreeNode(3);

    std::cout << "原始二叉树中序遍历结果:";
    inorderTraversal(root);
    std::cout << std::endl;

    // 插入新节点
    int value = 5;
    root = insertNode(root, value);

    std::cout << "插入节点后的二叉树中序遍历结果:";
    inorderTraversal(root);
    std::cout << std::endl;

    return 0;
}

以上代码演示了一个简单的二叉树插入方法。首先定义了二叉树节点的结构,包含一个整数值和左右子节点指针。然后使用递归的方式实现了二叉树的插入方法insertNode,根据插入值与当前节点值的大小关系,将新节点插入到左子树或右子树中。最后通过中序遍历验证插入结果。

这种二叉树插入方法的优势在于它可以保持二叉树的有序性质,即左子节点的值小于父节点的值,右子节点的值大于父节点的值。这对于一些需要有序访问的场景非常有用,比如二叉搜索树的构建和查找操作。

腾讯云提供了云计算相关的产品和服务,其中包括云服务器、云数据库、云存储等。具体可以参考腾讯云官方文档:腾讯云产品与服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【C++】————搜索二叉树

    中序遍历的结果我们也已经在前面的二叉树章节中讲清楚,这里我们不再多说。...该种方 式在现实生活中非常常见: 比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对; 再比如统计单词次数...,统计成功后,给定单词就可快速找到其出现的次数,单词与其出 现次数就是就构成一种键值对。...但对于同一个关键码集合,如果各关键码插入的次序不同,可能得到不同结构的二叉搜索树: 最优情况下:二叉搜索树为完全二叉树(或者接近完全二叉树),其平均比较次数为:log(N) 最差情况下:二叉搜索树退化为单支树...4.自律不是6点起床,7点准时学习,而是不管别人怎么说怎么看,你也会坚持去做,绝不打乱自己的节奏,是一种自我的恒心。

    6810

    C++二叉树探究

    完全二叉树 对一棵具有n个结点的二叉树按层序编号,如果编号为i(1二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。...注意完全二叉树中的编号与满二叉树中的相同,而且编号全部连续,有断开的就不是完全二叉树,如下图中的三棵树都不是完全二叉树。...二叉树的性质 二叉树性质1 在二叉树的第i层上至多有2i-1个结点(i>=1)。...如图所示的一棵完全二叉树采用顺序存储方式,如图表示: 由图可以看出,当二叉树为完全二叉树时,结点数刚好填满数组。 那么当二叉树不为完全二叉树时,采用顺序存储形式如何呢?...: HIDJEBFGCA 虽然二叉树的遍历过程看似繁琐,但是由于二叉树是一种递归定义的结构,故采用递归方式遍历二叉树的代码十分简单。

    26310

    C++之搜索二叉树

    前言 本文介绍了二叉搜索树的相关概念,主要介绍了如何使用和实现搜索二叉树以及搜索二叉树具体的例题练习。 ---- 一、二叉搜索树概念 二叉搜索树也称为二叉排序树。...搜索二叉树不支持修改。...对有n个节点的二叉树,若每个元素的查找概率相同,那么二叉搜索树平均查找次数是二叉树的高度次,即二叉树越高比较次数越多。...二叉搜索树性能最好是它的结构为完全二叉树(或接近完全二叉树),它的平均比较次数为 log_2 N ; 二叉搜索树性能最差是他的结构退化成单支,如图中右边的二叉树,它的平均比较次数为 \frac{N}{...本文作者目前也是正在学习C++相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

    51730

    C++ - AVL平衡二叉树

    AVL树的概念与特点 AVL树是一种自平衡的二叉查找树,平衡二叉树且搜索二叉树 定义与特点 定义: AVL树是最先发明的自平衡二叉查找树。...高度要求: AVL树是高度平衡搜索二叉树,通过控制高度差去控制平衡。...AVL树的结构(这里开始讲代码) 首先,它的底层是搜索二叉树的基础上进行的,所以会像搜索二叉树 struct AVLTreeNode { AVLTreeNode(const T& data =...//我会写删除的,就在本篇一起写了 private: Node* _pRoot; }; AVL树的插入 像搜索二叉树一样直接插入 新增节点后更新平衡因子 检测平衡因子,若不平衡开始旋转 根据平衡因子对不平衡子树开始向上旋转...subRL->_bf = 0; pParent->_bf = 0; } else { assert(false); } } AVL树的查找 就是搜索二叉树的查找

    7510

    数据结构_二叉树(C++

    数据结构_二叉树(C++实现 1前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。...int Size();//求二叉树的结点个数 int Height(Node *t);//递归求二叉树的高度/深度 int Height();//求二叉树的高度 void...;//结束标志 stopFlag:在创建二叉树的时候,需要不断获取二叉树的结点,这个变量是用来 终止获取结点 的结束标志 二叉树类的实现: 二叉树的构建 //模版不支持分离编译!!!.../后继的地址,则就能找到当前结点的直接前驱或者直接后继,这就为遍历提供了线索,故称这种指针为线索 根据线索性质的不同,二叉树可分为前序遍历线索二叉树、中序遍历线索二叉树和后序遍历线索二叉树三种。...right = right; s2.push(p); } //子树栈中只会剩下一个根结点,这个根结点就是表达式树的根结点 root = s2.top(); } 总体思路: 表达式其实是一种递归

    40770
    领券