二叉树的遍历--C#程序举例二叉树的遍历

关于二叉树的介绍笨男孩前面写过一篇博客

二叉树的简单介绍以及二叉树的存储结构

遍历方案

二叉树的遍历分为以下三种:

先序遍历:遍历顺序规则为【根左右】

中序遍历:遍历顺序规则为【左根右】

后序遍历:遍历顺序规则为【左右根】

举例说明如下图是一个颗二叉树:

图1一棵二叉树

上图是一颗二叉树:

先序遍历(根左右):ABCDEFGHI

中序遍历(左根右):BDCAEHGIF

后序遍历(左右根):DCBHIGFEA

C#代码举例

一棵简单的二叉树结构

     public class BinaryTree
{
public string Value;
public BinaryTree lChild;
public BinaryTree rChild;
}

先序遍历

         //先序遍历-递归实现   //根左右
public static void PreorderTraversal(BinaryTree tree)
{
if (tree == null)
return;
System.Console.WriteLine(tree.Value);
PreorderTraversal(tree.lChild);
PreorderTraversal(tree.rChild);
}

中序遍历

         //中序遍历-递归实现  //左根右
public static void InorderTraversal(BinaryTree tree)
{
if (tree == null)
return; InorderTraversal(tree.lChild);
System.Console.WriteLine(tree.Value);
InorderTraversal(tree.rChild);
}

后序遍历

         //后序遍历-递归实现 //左右根
public static void PostorderTraversal(BinaryTree tree)
{
if (tree == null)
return; PostorderTraversal(tree.lChild);
PostorderTraversal(tree.rChild);
System.Console.WriteLine(tree.Value);
}

程序测试

创建一棵如下图所示的二叉树

  /// <summary>
/// 创建一颗二叉树
/// </summary>
/// <returns></returns>
public static BinaryTree CreatBinaryTree()
{
//创建一个tree
BinaryTree tree = new BinaryTree(); //添加二叉树的值
tree.Value = "A"; //添加该树左子树
tree.lChild = new BinaryTree()
{
Value = "B",
lChild = null,
rChild = new BinaryTree()
{
Value = "C",
lChild = new BinaryTree()
{
Value = "D",
},
rChild = null,
}
}; //添加该树右子树
tree.rChild = new BinaryTree()
{
Value = "E",
lChild = null,
rChild = new BinaryTree()
{
Value = "F",
lChild = new BinaryTree()
{
Value = "G",
lChild = new BinaryTree()
{
Value = "H",
lChild = null,
rChild = null
},
rChild = new BinaryTree()
{
Value = "I",
lChild = null,
rChild = null }
},
rChild = null
} };
return tree;
}

测试代码

         static void Main(string[] args)
{
BinaryTree tree = CreatBinaryTree(); Console.WriteLine("------------先序遍历------------");
PreorderTraversal(tree); Console.WriteLine("------------中序遍历------------");
InorderTraversal(tree);
Console.WriteLine("------------后序遍历------------");
PostorderTraversal(tree); Console.Read();
}

测试结果:

 有了上面的知识储备,那么涉及到二叉树的问题,那基本就有点普了,下面看一道试题(面试的题,具体是哪个公司就不说了,免得大伙百度搜索)

试题:找出一颗二叉树中是否存在值与某一个值的相等的元素  (记忆里大概是这个意思)

这就很简单了,实际上就考一个二叉树的遍历,这里写一个先序遍历查找的例子

查找节点函数

         /// <summary>
/// 先序遍历查找二叉树中是否存在某一个值,并返回该元素
/// </summary>
/// <param name="tree"></param>
/// <param name="value"></param>
/// <returns></returns>
public static BinaryTree PreorderTraversalSelectValue(BinaryTree tree, string value)
{
if (tree == null)
{
return null;
}
if (tree.Value == value)
{
return tree;
}
//找左子树
BinaryTree node = PreorderTraversalSelectValue(tree.lChild,value);
if (node != null)
{
return tree;
}
else
{
//找右子树
node = PreorderTraversalSelectValue(tree.rChild,value);
return node;
}
}

测试代码:

   BinaryTree tree2 =  PreorderTraversalSelectValue(tree,"F");
if (tree2 == null)
{
Console.WriteLine("该二叉树中不存在F");
}
else
{
Console.WriteLine("该二叉树中存在值为{0}的元素",tree2.Value);
}
BinaryTree tree3 = PreorderTraversalSelectValue(tree, "J");
if (tree3 == null)
{
Console.WriteLine("该二叉树中不存该元素J");
}
else
{
Console.WriteLine("该二叉树中存在值为{0}的元素", tree3.Value);
}

程序运行结果:

有需要源代码工程的可以自己下载

程序源代码工程下载

以上是一个面试经历,面试官给的试题,当时我记得用先序遍历做的,用笔写(确实和用VS写感觉是不一样的,O(∩_∩)O哈哈~)自我感觉当时做的并不满意,公司就不给大伙公开了,这是个职业素养问题,免得大伙来百度搜索,为此特意总结出这么一篇来!关于二叉树,这里还有一篇二叉链表存储的博客,喜欢可以去查看!

二叉树的简单介绍以及二叉树的存储结构

C#实现二叉树--二叉链表结构

二叉树的遍历--C#程序举例二叉树的遍历的更多相关文章

  1. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  2. 二叉树Bynary_Tree(2):二叉树的递归遍历

    7/18/2017 正在码,理解完就写博 7/21/2017 终于码完,借助链表实现的队列撸一个二叉树对于我来说有难度,撸了两天没有成果,我最后选用的是数组实现的循环队列去撸一个二叉树 正文如下: 以 ...

  3. 使用Java实现二叉树的添加,删除,获取以及遍历

    一段来自百度百科的对二叉树的解释: 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用 ...

  4. c++智能指针和二叉树(1): 图解层序遍历和逐层打印二叉树

    二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不胜数. 然而大多数文章都是讲解的前序/中序/后序遍历,有关逐层打印元素的文章并不多,已有文章的讲解也较为晦涩读起来不得要领.本文将用形象的 ...

  5. LeetCode:二叉树的前、中、后序遍历

    描述: ------------------------------------------------------- 前序遍历: Given a binary tree, return the pr ...

  6. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  7. 数据结构实习 problem L 由二叉树的中序层序重建二叉树

    由二叉树的中序层序重建二叉树 writer:pprp 用层序中序来重建二叉树 代码点这里 其实本质上与前序中序建立二叉树没有什么太大区别 大概思路: 递归解法,对当前层进行处理,通过层序遍历可以得到当 ...

  8. C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

    C#实现如何判断一个数组中是否有重复的元素   如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...

  9. 【java 数据结构】还不会二叉树?一篇搞定二叉树

    二叉树是我们常见的数据结构之一,在学习二叉树之前我们需要知道什么是树,什么是二叉树,本篇主要讲述了二叉树,以及二叉树的遍历. 你能get到的知识点? 1.树的介绍 2.二叉树的介绍 3.二叉树遍历的四 ...

随机推荐

  1. 版本控制-搭建git服务器

    GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...

  2. android 异常:ScrollView can host only one direct child

    android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 主要是ScrollView内部只能有一个子元素,即不能并列 ...

  3. WIN10平板系统 如何自定义分辨率,修改分辨率

    从以下网址下载Intel网卡驱动,注意只要下载zip版本的(如果是exe版本的,双击将提示win10无法为此计算机验证正在安装的驱动程序,也包括你用驱动精灵这种软件,也会安装的时候由于这个问题装不上) ...

  4. Ubuntu16.04下安装搭配Python3.6相关配置软件方法

    1 安装Python3.6.4 此处推荐直接安装Anaconda3,来实现Python3.6.4的环境配置. Anaconda3下载链接:https://www.anaconda.com/downlo ...

  5. armeabi和armeabi-v7a(转)

    在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下. 可以贴个ADT代码说明问题: // ...

  6. 关于redis性能问题分析和优化

    一.如何查看Redis性能 info命令输出的数据可以分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,comm ...

  7. 浅谈java构建工具的选择

    在学校的时候还总是自己用eclipse自带的jar导出工具,然后人工来给项目打包,那是相当的原始. 而后工作了,项目中都是用ant,慢慢的开始学会使用这个工具.感觉就和脚本一样,很容易读懂,做项目构建 ...

  8. connect by prior start with 语句实现树递归查询[百度经验]

    TART WITH CONNECT BY PRIOR子句实现递归查询 TART WITH CONNECT BY PRIOR这个语法主要用于查询数据包中的树型结构关系.先看下原始数据时怎么样的吧! 表中 ...

  9. js绝对地址图片转换成base64的方法

    //将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...

  10. 小米手机安装mitmproxy证书

    [本文出自天外归云的博客园] 问题描述 小米手机在连接mitmproxy代理后通过浏览器访问mitm.it下载android证书后无法成功安装证书 设备:Redmi Note 2(红米手机) 解决方法 ...