欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C# » 正文

热门阅读

在C#实现二叉树遍历的示例

创建时间:2013年04月11日 15:39  阅读次数:(25839)
分享到:
今天在学习严蔚敏老师的数据结构教程,看到教程里面有介绍遍历二叉树的三种方式,就想到要用C#来实现一次。

在严蔚敏老师的数据结构教程里面有介绍,二叉树的遍历有三种方式,分别是:先(根)序遍历算法,中(根)序遍历算法,后(根)序遍历算法。下面我们就以下图中的二叉树为例来实现这三个算法。
二叉树

从上面我们先计算出三种遍历算法的结果:
先(根)序算法:1 2 4 5 3 6 7
中(根)序算法:4 2 5 1 3 7 6
后(根)序算法:4 5 2 7 6 3 1

下面我们用C#方法来实现它,全部代码如下:
using System;

namespace ConsoleApplication4
{
//先定义一个树的类型,包括数据及左右字树及父节点
public class Tree<T>
{
    //节点数据
    public T Data
    {
        get;
        set;
    }

    //左子树
    public Tree<T> LNode
    {
        get;
        set;
    }

    //右子树
    public Tree<T> RNode
    {
        get;
        set;
    }

    //双亲节点
    public Tree<T> PNode
    {
        get;
        set;
    }

    public Tree(T _data)
    {
        this.Data = _data;
    }
}

class Program
{
    static Program() { }
    public Program() { }
    static void Main(string[] args)
    {
        //初始化各节点
        Tree<int> node_1 = new Tree<int>(1);
        Tree<int> node_2 = new Tree<int>(2);
        Tree<int> node_3 = new Tree<int>(3);
        Tree<int> node_4 = new Tree<int>(4);
        Tree<int> node_5 = new Tree<int>(5);
        Tree<int> node_6 = new Tree<int>(6);
        Tree<int> node_7 = new Tree<int>(7);

        //将各节点组成上图中的树
        SetTree(ref node_1, node_2, node_3, null);
        SetTree(ref node_2, node_4, node_5, node_1);
        SetTree(ref node_3, null, node_6, node_1);
        SetTree(ref node_6, node_7, null, node_3);

        //输出各遍历的结果
        Console.Write("先序遍历:");
        ReadFirst(node_1);
        Console.WriteLine();
        
        Console.Write("中序遍历:");
        ReadSecond(node_1);
        Console.WriteLine();
        
        Console.Write("后序遍历:");
        ReadThird(node_1);
        Console.WriteLine();
        Console.ReadLine();
    }

    //给各节点初始化左右子树及双亲节点
    public static void SetTree(ref Tree<int> tree, Tree<int> ltree, Tree<int> rtree, Tree<int> ptree)
    {
        tree.LNode = ltree;
        tree.RNode = rtree;
        tree.PNode = ptree;
    }

    //先序遍历
    public static void ReadFirst(Tree<int> tree)
    {
        if (tree != null)
        {
            Console.Write(tree.Data);
            ReadFirst(tree.LNode);
            ReadFirst(tree.RNode);
        }
        else
        {
            return;
        }
    }

    //中序遍历
    public static void ReadSecond(Tree<int> tree)
    {
        if (tree != null)
        {
            ReadSecond(tree.LNode);
            Console.Write(tree.Data);
            ReadSecond(tree.RNode);
        }
        else
        {
            return;
        }
    }

    //后序遍历
    public static void ReadThird(Tree<int> tree)
    {
        if (tree != null)
        {
            ReadThird(tree.LNode);
            ReadThird(tree.RNode);
            Console.Write(tree.Data);
        }
        else
        {
            return;
        }
    }
}
}

代码就全部完成了,运行结果如下图:
二叉树遍历结果
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论2条
  • #1楼  评论人:匿名  评论时间:2014-4-10 23:25:02
  • 这个二叉树的图是有问题的,代码中写的是 7 节点是6节点的左子树,可是图上显示的是右子树。
  • #2楼  评论人:Wyf  评论时间:2014-4-11 9:20:54
  • 是的是的,还是你看的仔细啊。但这不影响示例的意思,多包涵!
发表评论:
留言人:
内  容:
请输入问题 2+52=? 的结果(结果是:54)
结  果: