0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++自定义二叉树并输出二叉树图形

jf_96884364 来源:jf_96884364 作者:jf_96884364 2023-01-10 16:29 次阅读

使用C++构建一个二叉树并输出。

输入

输入根节点为10,依次输入6、4、8、14、12、16

代码如下:

#include 
#include 
#include 
#include
#include  
#include

#include 
using namespace std;


struct TreeLinkNode         // 定义二叉树
{
    int val;                       // 当前节点值用val表示
    struct TreeLinkNode *left;     // 指向左子树的指针用left表示
    struct TreeLinkNode *right;    // 指向右子树的指针用right表示
    struct TreeLinkNode *parent;  //指向父节点的指针用parent表示
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), parent(NULL) { } // 初始化当前结点值为x,左右子树、父节点为空
};

//创建树
TreeLinkNode* insert(TreeLinkNode* tree, int value)
{
    TreeLinkNode* node = (TreeLinkNode*)malloc(sizeof(TreeLinkNode)); // 创建一个节点
    node->val = value;      // 初始化节点
    node->left = NULL;
    node->right = NULL;
    node->parent = NULL;

    TreeLinkNode* temp = tree;      // 从树根开始
    while (temp != NULL)
    {
        if (value < temp->val)  // 小于根节点就进左子树
        {
            if (temp->left == NULL)
            {
                temp->left = node;  // 新插入的数为temp的左子树
                node->parent = temp; // temp为新插入的数的父节点
                return tree;
            }
            else           // 下一轮判断
                temp = temp->left;
        }
        else           // 否则进右子树
        {    

            if (temp->right == NULL)
            {
                temp->right = node;  // 新插入的数为temp的右子树
                node->parent = temp; // temp为新插入的数的父节点
                return tree;
            }
            else           // 下一轮判断
                temp = temp->right;
        }
    }
    return tree;
}
 

//  ************* 输出图形二叉树 *************
void output_impl(TreeLinkNode* n, bool left, string const& indent)
{
    if (n->right)
    {
        output_impl(n->right, false, indent + (left ? "|     " : "      "));
    }
    cout << indent;
    cout << (left ? '\\' : '/');
    cout << "-----";
    cout << n->val << endl;
    if (n->left)
    {
        output_impl(n->left, true, indent + (left ? "      " : "|     "));
    }
}
void output(TreeLinkNode* root)
{
    if (root->right)
    {
        output_impl(root->right, false, "");
    }
    cout << root->val << endl;
    if (root->left)
    {
        output_impl(root->left, true, "");
    }
    system("pause");
}
//  ***************************************



// ====================测试代码====================
int main()
{

    TreeLinkNode tree = TreeLinkNode(10);       // 树的根节点
    TreeLinkNode* treeresult;

    treeresult = insert(&tree, 6);         // 输入n个数并创建这个树
    treeresult = insert(&tree, 4);
    treeresult = insert(&tree, 8);
    treeresult = insert(&tree, 14);
    treeresult = insert(&tree, 12);
    treeresult = insert(&tree, 16);

    output(treeresult);         //  输出图形二叉树

}

输出

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图形
    +关注

    关注

    0

    文章

    71

    浏览量

    19187
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    12240
收藏 人收藏

    评论

    相关推荐

    二叉树二叉树的性质(1)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:06:44

    二叉树二叉树的性质(2)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:08:32

    二叉树二叉树的性质(3)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:09:51

    平衡二叉树(1)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:42:30

    平衡二叉树(2)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:43:54

    平衡二叉树(3)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:45:06

    计算机二叉树的问题

    各位大神,本人马上要考计算机级了,那个二叉树老是弄不明白,比如一个题目,一棵二叉树共有25个节点,其中五个叶子节点,则度为1的节点数为?
    发表于 09-04 09:45

    二叉树删除算法

    二叉树的删除操作主要是寻找替代点来进行替换操作。方法:先右转,再一直左转,直到左连接为空的那个点。然后,摘取出来,完成链接指向操作。public void deletmin(void){ root
    发表于 12-30 20:55

    二叉查找(GIF动图讲解)

    二叉查找(Binary Search Tree),也称二叉搜索,是指一棵空或者具有下列性质的二叉树
    发表于 07-29 15:24

    2016大疆笔试题与总结(编程类)

    总体来说,大疆的题目不算太难。尤其是编程题,思路很清晰,不涉及到太复杂的算法。只有第三题可能涉及到递归操作(软肋)。其中第题有关完全二叉树的操作,只需要知道完全二叉树的四个重要性质就对了,借助数学
    发表于 11-21 15:28

    C语言构建一个二叉树失败

    ; ,tree.leftnode->data);这三个输出都是乱码,我不知道二叉树的建立过程中问题在哪里,我应该在每个节点都分配了内存,不过结果好像有问题}
    发表于 03-24 03:47

    什么是“红黑”看了就知道

    今天我们要说的红黑就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较
    发表于 10-27 17:00

    Java编程求二叉树的镜像两种方法介绍

    给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。仔细分析这两棵的特点,看看能不能总结出求镜像的步骤。这两棵的根节点相
    发表于 12-16 16:25

    二叉树的代码实现

    二叉树的主要操作有遍历,例如有先序遍历、中序遍历、后序遍历。在遍历之前,就是创建一棵二叉树,当然,还需要有删除二叉树的算法。
    的头像 发表于 01-18 10:41 907次阅读
    <b class='flag-5'>二叉树</b>的代码实现

    C++构建并复制二叉树

    使用C++构建一个二叉树并复制、输出
    的头像 发表于 01-10 15:17 758次阅读
    <b class='flag-5'>C++</b>构建并复制<b class='flag-5'>二叉树</b>