返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何建立链式二叉树
  • 356
分享到

C++如何建立链式二叉树

2023-07-02 00:07:18 356人浏览 薄情痞子
摘要

本篇内容介绍了“c++如何建立链式二叉树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!递归建立二叉树二叉树的结构体typedef 

本篇内容介绍了“c++如何建立链式二叉树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    递归建立二叉树

    二叉树的结构体

    typedef struct node{int data;Node* lchild;Node* rchild;}BiNode,*BiTree;

    二叉树顾名思义最多只有两个子结点和一个数据域,既然是链式那么子结点定义为结点指针类型,数据域就可以根据需要设置了,可以是整型也可以是字符型。

    二叉树初始化

    BiTree createBiTree(BiTree &T){int d;cin >> d;if (d == 0)    T = NULL;else{T = (BiTree)malloc(sizeof(BiNode));T->data = d;T->lchild = createBiTree(T->lchild);T->rchild = createBiTree(T->rchild);}return T;}

    这个初始化函数的返回值为BiTree是一个结构体指针类型,用来返回初始化后的 T 二叉树;整型数据d是用来给二叉树的结点赋值的,当输入0的时候,该结点为空结点;当结点的数据域不为零,给该结点动态分配内存空间,并把d赋值给T->data;然后就是对左右子树的递归初始化了。

    先序遍历

    void PreOrder(BiTree T)//先序{if (T){cout << T->data<<" ";PreOrder(T->lchild);PreOrder(T->rchild);}}

    先序遍历就是先访问根结点,在访问左子树,最后访问右子树,这里也写成递归形式;先访问当前结点的数据,再对左右子树进行访问。

    中序遍历

    void InOrder(BiTree T)//中序{if (T != NULL){PreOrder(T->lchild);cout << T->data << " ";PreOrder(T->rchild);}}

    中序遍历就是先访问左子树,在访问根结点,最后访问右子树,这里也写成递归形式;先访问当前结点的左子树的数据,再对该结点的数据进行访问,最后对右子树进行访问。

    后序遍历

    void PostOrder(BiTree T)//后序{if (T){PreOrder(T->lchild);PreOrder(T->rchild);cout << T->data << " ";}}

    后序遍历就是先访问左子树,在访问右子树,最后访问根结点,这里也写成递归形式;先访问当前结点的左子树的数据,再对右子树进行访问,最后访问根结点。

    具体例题

    参考上面的结构体,设计一个函数,要求能够同时求出二叉树中所有结点的的个数和二叉树中数据为奇数的和;

    我的思考:该函数传入m和n两个全局变量,使用引用传递;当树不为空时,m++,n等于n加该结点数据域的值,接下来进行左右子树的递归调用:

    void countT(BiTree T, int &m, int &n){if (T == NULL) return ;if (T->data % 2 != 0) n += T->data;m++;countT(T->lchild, m, n);countT(T->rchild, m, n);}

    从主函数中这样调用:

    int m = 0,n = 0;

    BiTree T=NULL;

    countT(T, m, n);

    最后输出m和n的值即可

    效果截图:

    C++如何建立链式二叉树

    注意输出的格式,必须是树的形式,下面解析一下

    输入的格式

    注意:输入的格式必须是树的先序遍历形式,因为在这个程序中初始化二叉树就是用的先序的方式

    C++如何建立链式二叉树

    在这个二叉树先序输入数据:3 4 6 0 8 0 0 0 11 13 0 0 0

    C++如何建立链式二叉树

    全部源码

    粘贴到C++编译器就能使用

    #include<iOStream>using namespace std;typedef struct Node{int data;Node* lchild;Node* rchild;}BiNode,*BiTree;BiTree createBiTree(BiTree &T){int d;cin >> d;if (d == 0)    T = NULL;else{T = (BiTree)malloc(sizeof(BiNode));T->data = d;T->lchild = createBiTree(T->lchild);T->rchild = createBiTree(T->rchild);}return T;}void PreOrder(BiTree T)//先序{if (T){cout << T->data<<" ";PreOrder(T->lchild);PreOrder(T->rchild);}}void InOrder(BiTree T)//中序{if (T){InOrder(T->lchild);cout << T->data << " ";InOrder(T->rchild);}}void PostOrder(BiTree T)//后序{if (T){PostOrder(T->lchild);PostOrder(T->rchild);cout << T->data << " ";}}void countT(BiTree T, int &m, int &n){if (T == NULL) return ;if (T->data % 2 != 0) n += T->data;m++;countT(T->lchild, m, n);countT(T->rchild, m, n);}int main(){int m = 0,n = 0;BiTree T=NULL;cout << "输入先序遍历结点,建立二叉树" << endl;T = createBiTree(T);cout << "先序遍历结果" << endl;PreOrder(T);cout << endl;cout << "中序遍历结果" << endl;InOrder(T);cout << endl;cout << "后序遍历结果" << endl;PostOrder(T);cout << endl;countT(T, m, n);cout << "结点个数为:" << m << endl;cout << "数据为:" << n << endl;}

    “C++如何建立链式二叉树”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: C++如何建立链式二叉树

    本文链接: https://lsjlt.com/news/338627.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C++如何建立链式二叉树
      本篇内容介绍了“C++如何建立链式二叉树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!递归建立二叉树二叉树的结构体typedef ...
      99+
      2023-07-02
    • C++简单又轻松建立链式二叉树流程
      目录递归建立二叉树二叉树的结构体二叉树初始化先序遍历中序遍历后序遍历具体例题输入的格式全部源码总结递归建立二叉树 二叉树的结构体 typedef struct Node { int...
      99+
      2024-04-02
    • C++如何实现二叉树链表
      目录C++二叉树链表C++二叉树转链表C++二叉树链表 Node.h #ifndef NODE_H #define NODE_H #include <iostream> ...
      99+
      2024-04-02
    • C++链式二叉树深入分析
      目录二叉树的结构和概念二叉树的操作前序遍历中序遍历和后序遍历二叉树的节点个数求二叉树叶子结点个数求二叉树的深度在二叉树查找为X的结点之前我们的重点学习二叉树都是完全二叉树,接下来我们...
      99+
      2024-04-02
    • C语言数据结构之二叉链表创建二叉树
      目录一、思想(先序思想创建)二、创建二叉树(1)传一级参数方法(2)传二级参数方法一、思想(先序思想创建) 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建...
      99+
      2024-04-02
    • C++如何实现由先序和后序建立二叉树
      今天小编给大家分享一下C++如何实现由先序和后序建立二叉树的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。由先序和后序遍历建立...
      99+
      2023-06-19
    • C语言二叉树的建立与遍历方法
      本篇内容介绍了“C语言二叉树的建立与遍历方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录这里给一个样例树:总结这里给一个样例树:代码:...
      99+
      2023-06-20
    • C++如何合并二叉树
      这篇文章主要介绍了C++如何合并二叉树,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。...
      99+
      2023-06-20
    • C语言 链式二叉树结构详解原理
      目录前言二叉树节点声明二叉树的遍历构建二叉树1.前序遍历2.中序遍历3.后序遍历二叉树节点的个数二叉树叶子节点的个数二叉树第K层节点个数二叉树的高度/深度二叉树查找值为x的节点整体代...
      99+
      2024-04-02
    • C语言链式二叉树结构原理是什么
      这篇文章主要介绍“C语言链式二叉树结构原理是什么”,在日常操作中,相信很多人在C语言链式二叉树结构原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言链式二叉树结构原理是什么”的疑惑有所帮助!接下来...
      99+
      2023-06-25
    • 详细了解C语言二叉树的建立与遍历
      目录这里给一个样例树:总结这里给一个样例树: 代码: #include <stdio.h> #include <string.h> #include ...
      99+
      2024-04-02
    • 数据结构之链式二叉树详解
      目录🍏1.二叉树的遍历🍏1.1前序遍历1.2中序遍历1.3后序遍历1.4层次遍历 🍎2.链式二叉树的实现🍎2.1二叉树的创建2.2前序遍历2.3中序遍历2.4后序遍历2.5...
      99+
      2023-05-16
      C语言链式二叉树 数据结构链式二叉树 C语言 数据结构
    • C#如何实现二叉查找树
      这篇文章主要介绍了C#如何实现二叉查找树的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#如何实现二叉查找树文章都会有所收获,下面我们一起来看看吧。对于符号表,要支持高效的插入操作,就需要一种链式结构。但单链表...
      99+
      2023-06-30
    • c语言如何构建一个静态二叉树
      这篇文章主要介绍“c语言如何构建一个静态二叉树”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c语言如何构建一个静态二叉树”文章能帮助大家解决问题。第一、树的构建定义树结构struct BT...
      99+
      2023-06-16
    • 如何在Python中创建二叉树
      目录前言二叉树节点定义递归构建二叉树前言 本文的内容是数据结构中二叉树部分最基础的,之所以写一下主要是为了方便刷题的时候,能够在自己电脑上很快的使用这种小的demo进行复杂的练习。...
      99+
      2024-04-02
    • java如何创建普通二叉树
      java创建二叉树 这段时间一直在复习数据结构的知识。 从最基础的开始,实现一个普通的二叉树。但发现也不那么简单。因为之前学数据结构时是用C语言写的。 指针用来对结构体的值操作比较好...
      99+
      2024-04-02
    • C语言二叉树的链式存储结构是怎样的
      本文小编为大家详细介绍“C语言二叉树的链式存储结构是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言二叉树的链式存储结构是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉树的链式存储结构是指用...
      99+
      2023-06-29
    • C++如何实现二叉树的遍历
      本篇内容介绍了“C++如何实现二叉树的遍历”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!二叉树的遍历Q:什么是二叉树的遍历?A:二叉树的遍历...
      99+
      2023-06-30
    • C++二叉搜索树BSTree如何使用
      这篇文章主要介绍“C++二叉搜索树BSTree如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++二叉搜索树BSTree如何使用”文章能帮助大家解决问题。一、概念二叉搜索树又称二叉排序树,它...
      99+
      2023-07-05
    • java中如何实现重建二叉树
      题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回...
      99+
      2021-06-28
      java教程 java 重建 二叉树
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作