首页 > 其他分享 >数据结构笔记(十四)二叉树的遍历(递归)

数据结构笔记(十四)二叉树的遍历(递归)

时间:2024-03-17 16:00:12浏览次数:20  
标签:Node 数据结构 TreeNode struct 遍历 right 二叉树 NULL root

四种访问方式:前序遍历,中序遍历,后序遍历,层序遍历

这篇文章主要为前序,中序,后序遍历的递归形式,递归形式较为简单,后面更新遍历的循环形式较为复杂,建议使用递归形式

#include<stdio.h>

#include<stdlib.h>




typedef char E;

typedef struct TreeNode* Node;




struct TreeNode{

    E element;

    struct TreeNode* left;

    struct TreeNode* right;

};



//前序遍历(递归)

//变量根结点

void preOrder(Node root)

{

    if(root==NULL)

    return;

    printf("%c",root->element);

    preOrder(root->left);

    preOrder(root->right);

}

//中序遍历(递归)

//变量根结点

void inOrder(Node root)

{

    if(root==NULL)

    return;

    inOrder(root->left);

    printf("%c",root->element);

    inOrder(root->right);

}

//后序遍历(递归)

//变量根结点

void postOrder(Node root)

{

    if(root==NULL)

    return;

    postOrder(root->left);

    postOrder(root->right);

    printf("%c",root->element);

}

int main()

{

    Node a = malloc(sizeof(struct TreeNode));

    Node b = malloc(sizeof(struct TreeNode));

    Node c = malloc(sizeof(struct TreeNode));

    Node d = malloc(sizeof(struct TreeNode));

    Node e = malloc(sizeof(struct TreeNode));

    Node f = malloc(sizeof(struct TreeNode));

    a->element='A';

    b->element='B';

    c->element='C';

    d->element='D';

    e->element='E';

    f->element='F';

    a->left=b;

    a->right=c;

    b->left=d;

    b->right=e;

    c->left=NULL;

    c->right=f;

    d->left=NULL;

    d->right=NULL;

    e->left=NULL;

    e->right=NULL;

    f->left=NULL;

    f->right=NULL;

    preOrder(a);

    printf("\n");

    inOrder(a);

    printf("\n");

    postOrder(a);


    return 0;


}

标签:Node,数据结构,TreeNode,struct,遍历,right,二叉树,NULL,root
From: https://blog.csdn.net/2301_79268604/article/details/136783799

相关文章

  • 数据结构(三)单调栈---以题为例
    给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。输入格式第一行包含整数 N,表示数列长度。第二行包含 N 个整数,表示整数数列。输出格式共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出......
  • kbgress之数据结构设计
    前言自2024年2月17日至今,已经过去一个月时间,这场突如其来的重感冒使我难以招架,现在仍然有一点症状未消除,甚是难受。十多年没有患如此严重的感冒了,大家都说此次流感其实是新冠引发,也不知道真假,医生说是病毒性感冒,并没有说新冠二字,也有可能担心增加患者的心理负担,即便是新冠又能如......
  • 数据结构(二)双链表---以题为例
    实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 ......
  • 3044: 【数据结构】【栈】true or false
    题目描述帮助小明解决逻辑运算输入一个字符串(串长小于255)表达逻辑式子,内只包含true,false,or,and,not和空格,(不包含括号和xor),优先级同pascal.(not->and->or),同级左边先算,如果逻辑式有误则输出error。输出运算结果:true或者false,如果无法得到结果的输出error样例输......
  • 面试中可能问到的几种树结构(二叉树,平衡二叉树,红黑树,B树和B+树)
    二叉树的概念二叉树是一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。平衡二叉树概念平衡二叉树,是二叉树的一种变形,左子树的深度和右子树的深度不能超过一。红黑树概念红黑树是一种自......
  • 数据结构之有趣的扑克牌(出牌吧!!)
    题外话这不是魔法,而是科学小实验!!!请大家多多支持我,我真的真的太想进步了啊!!!!正题扑克牌代码思路1.代码分为买牌,洗牌还有发牌(三个人每个人五张牌)2.要熟练掌握javase初阶和数据结构中的ArrayList类扑克牌代码以及代码详解packageCard;importjava.util.Array......
  • leedcode-翻转二叉树
    自己写的:classSolution:definvertTree(self,root:Optional[TreeNode])->Optional[TreeNode]:#创建一个新的TreeNode以存储反转后的树newroot=TreeNode()#如果输入的根节点为空,则返回空ifnotroot:......
  • 数据结构知识总结笔记------第四章:串(2)串的简单模式匹配算法、KMP算法、KMP算法的改进
    1、简单模式匹配算法对一个串中某子串的定位操作称为串的模式匹配,其中待定位的子串称为模式串。算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后续字符;否则从主串的第二个字符开始,再重新用上一步的方法与模式串中的字符做比较,以......
  • 数据结构之顺序表(包学包会版)
    目录1.线性表2.顺序表2.1概念及结构2.2接口实现3.总结halo,又和大家见面了,今天要给大家分享的是顺序表的知识,跟着我的脚步,包学包会哦~规矩不乱,先赞后看!ps:(孙权劝学)1.线性表线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常......
  • 后端返回的数据结构可能是多样的,前端需要对数据进行处理,以适应页面展示的需求。请给出
    在前端开发中,针对后端返回的多变数据结构进行处理以适应页面展示需求的最佳实践包括以下几个方面:定义清晰的数据模型:在前端根据UI设计和功能需求明确所需的数据结构,并创建对应的JavaScript对象模型(或使用TypeScript等类型语言提供静态类型检查)。这有助于前端开发者预先了解......