二叉树遍历结果推二叉树

In this article, we shall look into how we can perform a Binary Tree Traversal using different methods.

在本文中,我们将研究如何使用不同的方法执行二叉树遍历。

A Binary Tree is a data structure where every node has at most two children. We call the topmost node as the Root node.

二叉树是一种数据结构,其中每个节点最多具有两个子节点。 我们将最顶层的节点称为“ 根”节点。

Since it could have two children, we could move across the Binary Tree in different ways. Here, we will discuss the three most commonly used methods for traversal, namely:

由于它可以有两个孩子,因此我们可以以不同的方式在二叉树上移动。 在这里,我们将讨论三种最常用的遍历方法,即:

  • PreOrder Traversal预购遍历
  • InOrder Traversal有序遍历
  • PostOrder Traversal后订单遍历

Let us consider the below Binary Tree and try to traverse it using the above methods.

让我们考虑下面的二叉树,并尝试使用上述方法遍历它。

Binary Tree
二叉树


1.二叉树预遍历 (1. Binary Tree PreOrder Traversal)

In a PreOrder traversal, the nodes are traversed according to the following sequence from any given node:

PreOrder遍历中,将按照以下顺序从任何给定节点遍历节点:

  • It will mark the current node as visited first.它将当前节点标记为首先访问。
  • Then, if a left child exists, it will go to the left sub-tree and continue the same process.然后,如果存在左子节点,它将转到左子树并继续相同的过程。
  • After visiting the left sub-tree, it will then move to its right sub-tree and continue the same process.访问左侧子树后,它将移至右侧子树并继续相同的过程。

Since the sequence is node -> left -> right, it is referred to as a PreOrder traversal, since the node is visited before the left sub-tree.

由于序列是节点->左->右,因此被称为PreOrder遍历 ,因为该节点在左子树之前被访问。

Let’s write the C/C++ code for this:

让我们为此编写C / C ++代码:


void preorder_traversal(Node* root) {if (root == NULL)return;printf("%d -> ", root->value);preorder_traversal(root->left);preorder_traversal(root->right);
}

PreOrder Traversal for our Binary Tree:

二叉树的预遍历:

10 -> 20 -> 40 -> 50 -> 30 -> 60 -> 70

10-> 20-> 40-> 50-> 30-> 60-> 70



2.二叉树有序遍历 (2. Binary Tree InOrder Traversal)

In an InOrder traversal, the nodes are traversed according to the following sequence from any given node:

InOrder遍历中,将按照以下顺序从任何给定节点遍历节点:

  • If a left child exists, it will always go to it first.如果存在左孩子,则它将始终优先处理。
  • After it visits the left sub-tree, it will visit the currently given node访问左子树后,它将访问当前给定的节点
  • After visiting the node, it will then move to its right sub-tree.访问该节点后,它将移至其右子树。

As the sequence is left -> node -> right, it will refer to it as an InOrder traversal, since we will visit the nodes “in order”, from left to the right.

由于序列在左侧->节点->右侧,因此将其称为InOrder遍历 ,因为我们将“按顺序”从左到右访问节点。

The C/C++ code is given below

C / C ++代码如下


void inorder_traversal(Node* root) {if (root == NULL)return;inorder_traversal(root->left);printf("%d\n", root->value);inorder_traversal(root->right);
}

InOrder Traversal for our Binary Tree:

二叉树的有序遍历:

40 -> 20 -> 50 -> 10 -> 60 -> 30 -> 70

40-> 20-> 50-> 10-> 60-> 30-> 70



3.二叉树后置遍历 (3. Binary Tree PostOrder Traversal)

In a PostOrder traversal, the nodes are traversed according to the following sequence from any given node:

PostOrder遍历中,将按照以下顺序从任何给定节点遍历节点:

  • If a left child exists, it will always go to it first.如果存在左孩子,则它将始终优先处理。
  • After visiting the left sub-tree, it will then move to its right sub-tree.访问左子树后,它将移至其右子树。
  • After it visits the right sub-tree, it will finally visit the currently given node访问正确的子树后,它将最终访问当前给定的节点

Since the sequence is left -> right -> node, it is referred to as a PostOrder traversal, since the nodes are visited at the last.

由于序列是从左->右->节点开始的,因此称为PostOrder遍历 ,因为最后一次访问了节点。

The C/C++ code is given below

C / C ++代码如下


void postorder_traversal(Node* root) {if (root == NULL)return;postorder_traversal(root->left);postorder_traversal(root->right);printf("%d\n", root->value);
}

PostOrder Traversal for our Binary Tree:

二叉树的PostOrder遍历:

40 -> 50 -> 20 -> 60 -> 70 -> 30 -> 10

40-> 50-> 20-> 60-> 70-> 30-> 10



4.用C / C ++完全实现二叉树遍历 (4. Complete Implementation of Binary Tree Traversal in C/C++)

To put it all together, I have put together the C/C++ code for all three traversals.

综上所述,我将所有三个遍历的C / C ++代码放在一起。


/**Code for https://journaldev.com articlePurpose: Performs common Traversals on a Binary Tree@author: Vijay Ramachandran@date: 28-01-2020
*/#include <stdio.h>
#include <stdlib.h>// Define the types of Traversals here
enum Traversal {PREORDER, INORDER, POSTORDER};typedef enum Traversal Traversal;
typedef struct Node Node;// Define the Tree Node here
struct Node {int value;// Pointers to the left and right childrenNode* left, *right;
};Node* init_tree(int data) {// Creates the tree and returns the// root nodeNode* root = (Node*) malloc (sizeof(Node));root->left = root->right = NULL;root->value = data;return root;
}Node* create_node(int data) {// Creates a new nodeNode* node = (Node*) malloc (sizeof(Node));node->value = data;node->left = node->right = NULL;return node;
}
void free_tree(Node* root) {// Deallocates memory corresponding// to every node in the tree.Node* temp = root;if (!temp)return;free_tree(temp->left);free_tree(temp->right);if (!temp->left && !temp->right) {free(temp);return;}
}void print_tree(Traversal traversal, Node* root) {// Prints the tree according to// various types of traversalsif (!root)return;switch(traversal) {case (PREORDER):// Do a Preorder Traversalprintf("%d -> ", root->value);print_tree(traversal, root->left);print_tree(traversal, root->right);break;case (INORDER):// Do an Inorder Traversalprint_tree(traversal, root->left);printf("%d -> ", root->value);print_tree(traversal, root->right);break;case (POSTORDER):// Do a postorder Traversalprint_tree(traversal, root->left);print_tree(traversal, root->right);printf("%d -> ", root->value);break;}
}int main() {// Program to demonstrate finding the height of a Binary Tree// Create the root node having a value of 10Node* root = init_tree(10);// Insert nodes onto the treeroot->left = create_node(20);root->right = create_node(30);root->left->left = create_node(40);root->left->right = create_node(50);root->right->left = create_node(60);root->right->right = create_node(70);printf("----Preorder Traversal:----\n");print_tree(PREORDER, root);printf("\n\n");printf("----Inorder Traversal:----\n");print_tree(INORDER, root);printf("\n\n");printf("----Postorder Traversal:----\n");print_tree(POSTORDER, root);printf("\n\n");// Free the tree!free_tree(root);return 0;
}

Output

输出量


----Preorder Traversal:----
10 -> 20 -> 40 -> 50 -> 30 -> 60 -> 70 -> ----Inorder Traversal:----
40 -> 20 -> 50 -> 10 -> 60 -> 30 -> 70 -> ----Postorder Traversal:----
40 -> 50 -> 20 -> 60 -> 70 -> 30 -> 10 ->


翻译自: https://www.journaldev.com/35001/binary-tree-traversal-preorder-inorder-postorder

二叉树遍历结果推二叉树

二叉树遍历结果推二叉树_二叉树遍历(PreOrder,InOrder,PostOrder)相关推荐

  1. 二叉树查找结点c语言_二叉树操作详解

    (给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...

  2. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数

    二叉树的最小深度 题目:给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20 ...

  3. es6遍历树结构并判断_递归遍历树结构,从某个节点开始查找其子节点中的所有叶子节点...

    背景 现在项目中哟这样的一个需求,左边显示一棵树目录,点击目录的一级或二级节点,右边显示其子节点中的所有叶子节点,而且要求前端来做这个,不用调用接口请求了,那么,这里记录一下我的实现方法.点击叶子节点 ...

  4. 二叉树遍历结果推二叉树_二叉树遍历技术

    二叉树遍历结果推二叉树 二叉树 (Binary Tree) A binary tree is a finite collection of elements or it can be said it ...

  5. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...

    1 packageSolution;2 3 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;6 7 ...

  6. 二叉树的深度优先遍历逆推

    二叉树的深度优先遍历逆推 二叉树的深度优先遍历有三种方式,分别叫做先序遍历(preorder).中序遍历(inorder)和后序遍历(postorder),它们之间的不同在于访问每个节点的次序不同. ...

  7. 二叉树的遍历及根据遍历反推树的方法详解

    一.前导-关于树的定义 森林(forest):每个连通分量(连通块)都是树的图.按照定义,一棵树也是森林. 生成树(spanning tree):一个连通无向图的生成子图,同时要求是树.也即在图的边集 ...

  8. 二叉树的基本操作_二叉树的遍历

    引入 前面讲到了二叉搜索树以及它的一些基本操作(插入,搜索,删除),可是我们要怎么知道这些操作已经被执行了呢?换句话说,怎样来描述二叉树的结构.这里我们又用到了遍历. 和图的遍历一样,我们也需要逐个访 ...

  9. 前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...

    二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode ...

最新文章

  1. 精心整理,机器学习的3大学习资源
  2. K - TimesIsMoney(查询)
  3. Java基础之static关键字的用法
  4. iOS万能跳转界面的方法
  5. c#使用HttpClient调用WebApi
  6. java byte[] 文件流 转换成string是乱码_Java学习--IO(二)、多线程
  7. 谈一谈为什么我要创建个人博客
  8. matlab 风机 功率曲线,风力发电机功率曲线统计MATLAB代码实现.docx
  9. android studio增量包,Android Studio 更新升级之增量升级
  10. flash图片如何镜像翻转_Flash制作跳动的文字镜像效果
  11. 如何做好日程管理?实操介绍:不同角色的日程管理方法
  12. 避免幻读 : next-key锁与MVCC
  13. mysql excel 函数_excel常用函数总结
  14. Skippr – 轻量、快速的 jQuery 幻灯片插件
  15. PAT乙级10019题——C语言
  16. 计算机考研301数学一攻略,国家海洋技术中心
  17. css实现3D长方形,可旋转
  18. 阿里云服务器配置远程打印机,电脑启用打印服务器配置
  19. 【夏目鬼鬼分享】SpringBoot2.0整合mybatis
  20. 陌生但默默一统江湖的MurmurHash

热门文章

  1. LNMP环境下压力测试时的主要调试参数
  2. Customer Group Checkout----------Red2Black_RealTidbits
  3. 明基电通董事长李焜耀
  4. ORALCE 两表结构更新
  5. [转载] python模板字符串和格式化字符串
  6. [转载] python查看的统计量_python 描述性统计_Python中的基本统计:描述性统计
  7. 数据加载中,请稍等......
  8. 2017.8.11 think list
  9. 14.Xcode8imageview图片圆角不显示的bug
  10. 【bzoj 入门OJ】[NOIP 热身赛]Problem C: 星球联盟(并查集)