zoukankan      html  css  js  c++  java
  • C#实现二叉树

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace BinaryTree
      8 {
      9     class Program
     10     {
     11         static void Main(string[] args)
     12         {
     13             Tree<int> myTree = new Tree<int>(5);
     14             for (int i = 0; i < 10; i++)
     15             {
     16                 myTree.Insert(i);
     17             }
     18             //myTree.WideOrderTree();
     19             //myTree.PreOrderTree(myTree);
     20             //myTree.InOrderTree(myTree);
     21             myTree.PostOrderTree(myTree);
     22         }
     23 
     24         //定义二叉树
     25         public class Tree<T> where T : IComparable<T>
     26         {
     27             private T data;
     28             private Tree<T> leftTree;
     29             private Tree<T> rightTree;
     30 
     31             //属性
     32             public T Data
     33             {
     34                 get
     35                 {
     36                     return data;
     37                 }
     38                 set
     39                 {
     40                     data = value;
     41                 }
     42             }
     43 
     44             public Tree<T> LeftTree
     45             {
     46                 get
     47                 {
     48                     return leftTree;
     49                 }
     50                 set
     51                 {
     52                     leftTree = value;
     53                 }
     54             }
     55 
     56             public Tree<T> RightTree
     57             {
     58                 get
     59                 {
     60                     return rightTree;
     61                 }
     62                 set
     63                 {
     64                     rightTree = value;
     65                 }
     66             }
     67 
     68             //构造函数,定义二叉树根节点
     69             public Tree(T data)
     70             {
     71                 this.data = data;
     72                 leftTree = null;
     73                 rightTree = null;
     74             }
     75 
     76             /// <summary>
     77             /// 向二叉树中插入一个新的结点
     78             /// 小于根节点插入左子树
     79             /// 大于根节点插入右子树
     80             /// </summary>
     81             public void Insert(T data)
     82             {
     83                 T dataNow = Data;
     84                 if (data.CompareTo(dataNow) < 0)
     85                 {
     86                     if (LeftTree == null)
     87                     {
     88                         LeftTree = new Tree<T>(data);
     89                     }
     90                     else
     91                     {
     92                         LeftTree.Insert(data);
     93                     }
     94                 }
     95                 else
     96                 {
     97                     if (RightTree == null)
     98                     {
     99                         RightTree = new Tree<T>(data);
    100                     }
    101                     else
    102                     {
    103                         RightTree.Insert(data);
    104                     }
    105                 }
    106             }
    107 
    108             /// <summary>
    109             /// 前序遍历:中左右
    110             /// </summary>
    111             public void PreOrderTree(Tree<T> root)
    112             {
    113                 if (root != null)
    114                 {
    115                     Console.WriteLine(root.Data);
    116                     PreOrderTree(root.LeftTree);
    117                     PreOrderTree(root.RightTree);
    118                 }
    119             }
    120 
    121             /// <summary>
    122             /// 中序遍历:左中右
    123             /// </summary>
    124             public void InOrderTree(Tree<T> root)
    125             {
    126                 if (root != null)
    127                 {
    128                     InOrderTree(root.LeftTree);
    129                     Console.WriteLine(root.Data);
    130                     InOrderTree(root.RightTree);
    131                 }
    132             }
    133 
    134             /// <summary>
    135             /// 后序遍历:左右中
    136             /// </summary>
    137             public void PostOrderTree(Tree<T> root)
    138             {
    139                 if (root != null)
    140                 {
    141                     PostOrderTree(root.LeftTree);
    142                     PostOrderTree(root.RightTree);
    143                     Console.WriteLine(root.Data);
    144                 }
    145             }
    146 
    147             /// <summary>
    148             /// 逐层遍历:
    149             /// 1. 从根节点开始,访问一个节点然后将其左右子树的根节点一次放入链表,然后删除该根节点。
    150             /// 2. 依次遍历链表中的元素,直到链表中元素数量为0。
    151             /// </summary>
    152             public void WideOrderTree()
    153             {
    154                 List<Tree<T>> nodeList = new List<Tree<T>>();
    155                 nodeList.Add(this);
    156                 Tree<T> temp = null;
    157                 while (nodeList.Count > 0)
    158                 {
    159                     Console.WriteLine(nodeList[0].Data);
    160                     temp = nodeList[0];
    161                     nodeList.RemoveAt(0);
    162                     if (temp.LeftTree != null)
    163                     {
    164                         nodeList.Add(temp.LeftTree);
    165                     }
    166                     if (temp.RightTree != null)
    167                     {
    168                         nodeList.Add(temp.RightTree);
    169                     }
    170                 }
    171             }
    172         }
    173     }
    174 }
  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4511913.html
Copyright © 2011-2022 走看看