/// <summary> /// 后序遍历 /// </summary> public static void ForEachLRD(DoubleLinkTreeNode <T> node) { if (node == null) { return; } ForEachLRD(node.LeftChild); ForEachLRD(node.RightChild); Console.WriteLine(node.Data); }
/// <summary> /// 删除右节点 /// </summary> /// <param name="node"></param> /// <returns></returns> public static DoubleLinkTreeNode <T> DeleteRight(DoubleLinkTreeNode <T> node) { if (node?.RightChild == null) { return(null); } var result = node.RightChild; node.RightChild = null; return(result); }
/// <summary> /// 计算叶子节点的数量 /// </summary> /// <param name="node"></param> /// <returns></returns> public static int GetLeafCount(DoubleLinkTreeNode <T> node) { if (node == null) { return(0); } else if (node.LeftChild == null && node.RightChild == null) { return(1); } else { return(GetLeafCount(node.LeftChild) + GetLeafCount(node.RightChild)); } }
/// <summary> /// 计算深度 /// </summary> /// <param name="node"></param> /// <returns></returns> public static int GetDepth(DoubleLinkTreeNode <T> node) { if (node == null) { return(0); } else if (node.LeftChild == null && node.RightChild == null) { return(1); } else { var left = GetDepth(node.LeftChild); var right = GetDepth(node.RightChild); return((left > right ? left : right) + 1); } }
/// <summary> /// 层序遍历 /// </summary> public static void ForEachLevel(DoubleLinkTreeNode <T> node) { if (node == null) { return; } var queue = new Queue <DoubleLinkTreeNode <T> >(); queue.Enqueue(node); while (queue.Count() != 0) { var item = queue.Dequeue(); Console.WriteLine(item.Data); if (item.LeftChild != null) { queue.Enqueue(item.LeftChild); } if (item.RightChild != null) { queue.Enqueue(item.RightChild); } } }
/// <summary> /// 插入右节点,当前右节点作为新节点的左节点 /// </summary> /// <param name="data"></param> /// <param name="node"></param> public static void InsertRight(T data, DoubleLinkTreeNode <T> node) { node.RightChild = new DoubleLinkTreeNode <T>(data, node.RightChild, null); }
public DoubleLinkTreeNode(T data, DoubleLinkTreeNode <T> left, DoubleLinkTreeNode <T> right) { Data = data; LeftChild = left; RightChild = right; }