首页
学习
活动
专区
工具
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++二叉树探究

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

24210

C++之搜索二叉树

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

50030

数据结构_二叉树C++

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

36970

二叉树OJ题(C++实现)

@TOC 1.二叉树的层序遍历 二叉树的层序遍历 主要思路是借助一个队列,将每一层的数据以size统计,当size为0时说明该层数据已经输入完,将这一层的数据传入vector中,再通过push_back...二叉树的最近公共祖先 二叉树的最近公共祖先 ---- ---- 共分为三种情况 第一种情况 寻找节点7与0的公共祖先为 根节点3 节点7在根的左子树,而节点0在根的右子树 若一个在根的左子树,一个在根的右子树...与节点4都属于根的左子树 若两个节点都在根的左子树,则递归根的左子树的节点为根,当这个根为两个节点其中一个时,则这个节点就为公共祖先 ---- 由于第二种和第三种情况,节点都在左子树上,所以可以看作是一种情况...通过遍历左子树的方式找到第一个节点 while(head&&head->left) { head=head->left; } return head; } }; ---- 4.从前序与中序遍历序列构造二叉树...---- 从前序与中序遍历序列构造二叉树 ---- ---- 创建root,并确定值为3 在中序数组中寻找 root值为3的节点 ,并标记其下标为rooti 再通过递归的方式分别创建root的left

16720

​qtcling - 一种更好的C++和标准库

有没有一种基于C系的解释型或带REPL的语言环境,既有传统CPP的好处,又可以直接在这种语法上无改地,或尽量少改地作脚本编程或解释编程呢?可喜的是,这并非技术的桎梧。...可以有: 1,第一种是tcc,据说它的编译速度之快已达到了解释语言的级别。可实际上,它只是编译速度足够快而已,称不上,也不可能称得上是解释语言。略过。 2,然后就是我们的cling了。...cling/clang是cern代替cint而开发的,基于jit,jit是一种能模拟REPL的技术,当然cling一个光吐吐的编译器还不够,cling/clang可以直接调用C系模块(call into...话说,克服了整合qt到cling,这足以成为一个十分实用的qtcling语言了,有了qtcling,从此我们的Cer就得福入门了,只需要学习一门语言,一种典范 – QT式基于PME的OO,我们就可以做系统编程和应用编程了

47730
领券