if (int.Parse(Console.ReadLine()) == 1) continue; else break; }
return tree; } #endregion }
#region 节点标识(用于判断孩子是节点还是线索) /// <summary> /// 节点标识(用于判断孩子是节点还是线索) /// </summary> public enum NodeFlag { SubTree = 1, Thread = 2 } #endregion
#region 线索二叉树的结构 /// <summary> /// 线索二叉树的结构 /// </summary> /// <typeparam></typeparam> public class ThreadTree<T> { public T data; public ThreadTree<T> left; public ThreadTree<T> right; public NodeFlag leftFlag; public NodeFlag rightFlag; } #endregion
#region 插入左节点或者右节点 /// <summary> /// 插入左节点或者右节点 /// </summary> public enum Direction { Left = 1, Right = 2 } #endregion
#region 线索二叉树的基本操作 /// <summary> /// 线索二叉树的基本操作 /// </summary> public class ThreadTreeManager { #region 将指定节点插入到二叉树中 /// <summary> /// 将指定节点插入到二叉树中 /// </summary> /// <typeparam></typeparam> /// <param></param> /// <param></param> /// <param>插入做左是右</param> /// <returns></returns> public ThreadTree<T> BinTreeThreadAddNode<T>(ThreadTree<T> tree, ThreadTree<T> node, T data, Direction direction) { if (tree == null) return null;
if (tree.data.Equals(data)) { switch (direction) { case Direction.Left: if (tree.left != null) throw new Exception("树的左节点不为空,不能插入"); else tree.left = node;
break; case Direction.Right: if (tree.right != null) throw new Exception("树的右节点不为空,不能插入"); else tree.right = node;
break; } }
BinTreeThreadAddNode(tree.left, node, data, direction); BinTreeThreadAddNode(tree.right, node, data, direction);
return tree; } #endregion
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|