首页 > 代码库 > 重学算法(1)--遍历二叉树

重学算法(1)--遍历二叉树

技术分享
  1 public class Tree<T> where T : IComparable<T>  2     {  3         /// <summary>  4         /// 定义树  5         /// </summary>  6         private T data;  7         private Tree<T> left;  8         private Tree<T> right;  9  10         /// <summary> 11         /// 构造函数 12         /// </summary> 13         /// <param name="nodeValue">二叉树根节点</param> 14         public Tree(T nodeValue) 15         { 16             this.data =http://www.mamicode.com/ nodeValue; 17             this.left = null; 18             this.right = null; 19         } 20  21         /// <summary> 22         /// 数据节点属性 23         /// </summary> 24         public T NodeData 25         { 26             get { return this.data; } 27             set { this.data =http://www.mamicode.com/ value; } 28         } 29  30         public Tree<T> leftTree 31         { 32             get { return this.left; } 33             set { this.left = value; } 34         } 35  36         public Tree<T> rightTree 37         { 38             get { return this.right; } 39             set { this.right = value; } 40         } 41  42         /// <summary> 43         /// 插入节点 小于该节点的放左侧,大于该节点的放右侧 44         /// </summary> 45         /// <param name="newItem"></param> 46         public void Insert(T newItem) 47         { 48             T currentNodeValue = http://www.mamicode.com/this.NodeData; 49             if (currentNodeValue.CompareTo(newItem) > 0) 50             { 51                 if (this.leftTree == null) 52                 { 53                     this.leftTree = new Tree<T>(newItem); 54                 } 55                 else 56                 { 57                     this.leftTree.Insert(newItem); 58                 } 59             } 60             else 61             { 62                 if (this.rightTree == null) 63                 { 64                     this.rightTree = new Tree<T>(newItem); 65                 } 66                 else 67                 { 68                     this.rightTree.Insert(newItem); 69                 } 70             } 71         } 72  73         /// <summary> 74         /// 先序遍历 根 左 右 75         /// </summary> 76         /// <param name="root"></param> 77         public void PreOrderTree(Tree<T> root) 78         { 79             if (root != null) 80             { 81                 Console.Write(root.NodeData); 82                 PreOrderTree(root.leftTree); 83                 PreOrderTree(root.rightTree); 84             } 85         } 86  87         /// <summary> 88         /// 中序遍历 左 根 右 89         /// </summary> 90         /// <param name="root"></param> 91         public void InOrderTree(Tree<T> root) 92         { 93             if (root != null) 94             { 95                 InOrderTree(root.leftTree); 96                 Console.Write(root.NodeData); 97                 InOrderTree(root.rightTree); 98             } 99         }100 101         /// <summary>102         /// 后序遍历 左 右 根103         /// </summary>104         /// <param name="root"></param>105         public void PostOrderTree(Tree<T> root)106         {107             if (root != null)108             {109                 PostOrderTree(root.leftTree);110                 PostOrderTree(root.rightTree);111                 Console.Write(root.NodeData);112             }113         }114 115         /// <summary>116         /// 逐层遍历:从根节点开始,访问一个节点然后将左右子树的根节点依次放入链表中,删除该节点117         /// 遍历到链表中没有数据为止118         /// </summary>119         public void WideOrderTree()120         {121             List<Tree<T>> nodeList = new List<Tree<T>>();122             nodeList.Add(this);123             Tree<T> temp = null;124             while (nodeList.Count > 0)125             {126                 Console.Write(nodeList[0].NodeData);127                 temp = nodeList[0];128                 nodeList.Remove(nodeList[0]);129                 if (temp.leftTree != null)130                 {131                     nodeList.Add(temp.leftTree);132                 }133                 if (temp.rightTree != null)134                 {135                     nodeList.Add(temp.rightTree);136                 }137             }138             Console.WriteLine();139         }140 141     }
View Code

这是第二次让人讲二叉树了,一定不可以忘记!

重学算法(1)--遍历二叉树