zoukankan      html  css  js  c++  java
  • 二叉树

    二叉树的三种遍历方式
    Public class Tree
        {
            public int value;
            public Tree Left;
            public Tree Right;
        }
        class Program
        {
            public static void PreOrder(Tree Tree)//前序遍历
            {
                int value = Tree.value;
                Console.WriteLine(value.ToString());
                if (Tree.Left != null)
                    PreOrder(Tree.Left);
                if (Tree.Right != null)
                    PreOrder(Tree.Right);
            }
            public static void InOrder(Tree Tree) // 中序遍历
            {
                if (Tree.Left != null)
                    InOrder(Tree.Left);
                int value = Tree.value;
                Console.WriteLine(value.ToString());
                if (Tree.Right != null)
                    InOrder(Tree.Right);
            }
            public static void PostOrder(Tree Tree) // 后序遍历
            {
                if (Tree.Left != null)
                    PostOrder(Tree.Left);
                if (Tree.Right!= null)
                    PostOrder(Tree.Right);
                int value = Tree.value;
                Console.WriteLine(value.ToString());
            }
            static void Main(string[] args)
            {
                Tree Tree = new Tree();
                Tree.value = 1;
                Tree.Left = new Tree() { value = 2, Left = new Tree() { value = 4, Right = new Tree() { value = 7 } } };
                Tree.Right = new Tree() { value = 3, Left = new Tree() { value = 5 }, Right = new Tree() { value = 6, Left = new Tree() { value = 8 } } };
    
                PreOrder(Tree);
                Console.WriteLine("
    
    ");
                InOrder(Tree);
                Console.WriteLine("
    
    ");
                PostOrder(Tree);
                Console.ReadLine();
            }
        }

    如果不是用递归,可以通过压栈来完成

       public static void PreOrderNoRecursion(Tree tree)
            {
                if (tree == null)
                    return;
    
                System.Collections.Generic.Stack<Tree> stack = new System.Collections.Generic.Stack<Tree>();
                Tree node = tree;
    
                while (node != null || stack.Any())
                {
                    if (node != null)
                    {
                        stack.Push(node); 
                        System.Console.WriteLine(node.value.ToString());
                        node = node.Left;
                    }
                    else
                    {
                        var item = stack.Pop();
                        node = item.Right;
                    }
                }
            }
            public static void InOrderNoRecursion(Tree tree)
            {
                if (tree == null)
                    return;
    
                System.Collections.Generic.Stack<Tree> stack = new System.Collections.Generic.Stack<Tree>();
                Tree node = tree;
                while (node != null || stack.Any())
                {
                    if (node != null)
                    {
                        stack.Push(node);
                        node = node.Left;
                    }
                    else
                    {
                        var item = stack.Pop();
                        System.Console.WriteLine(item.value.ToString());
                        node = item.Right;
                    }
                }
            }
            public static void PostOrderNoRecursion(Tree tree)
            {
                if (tree == null)
                    return;
    
                System.Collections.Generic.Stack<Tree> stack = new System.Collections.Generic.Stack<Tree>();
                Tree node = tree;
                Tree pre = null;
                stack.Push(node);
    
                while (stack.Any())
                {
                    node = stack.Peek();
                    if ((node.Left == null && node.Right == null) ||
                        (pre != null && (pre == node.Left || pre == node.Right)))
                    {
                        System.Console.WriteLine(node.value);
                        pre = node;
                        stack.Pop();
                    }
                    else
                    {
                        if (node.Right != null)
                            stack.Push(node.Right);
    
                        if (node.Left != null)
                            stack.Push(node.Left);
                    }
                }
            }
    View Code


     

  • 相关阅读:
    Delphi利用Windows GDI实现文字倾斜
    再学 GDI+文本输出文本样式
    GDI+在Delphi程序的应用 Photoshop色相饱和度明度功能
    GDI+图像与GDI位图的相互转换
    走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
    走进JavaWeb技术世界11:单元测试框架Junit
    走进JavaWeb技术世界10:从JavaBean讲到Spring
    走进JavaWeb技术世界9:Java日志系统的诞生与发展
    走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
    随笔总和
  • 原文地址:https://www.cnblogs.com/lemonP/p/7307315.html
Copyright © 2011-2022 走看看