首页 > 代码库 > 重学算法(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 }
这是第二次让人讲二叉树了,一定不可以忘记!
重学算法(1)--遍历二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。