while (head != tail) { var tempNode = treeList[head];
head = (head + 1) % Length;
//输出节点 Console.Write(tempNode.data + "t");
//如果左子树不为空,则将左子树存于数组的tail位置 if (tempNode.left != null) { treeList[tail] = tempNode.left;
tail = (tail + 1) % Length; }
//如果右子树不为空,则将右子树存于数组的tail位置 if (tempNode.right != null) { treeList[tail] = tempNode.right;
tail = (tail + 1) % Length; } } } #endregion
<6> 清空二叉树
虽然C#里面有GC,但是我们能自己释放的就不麻烦GC了,同样清空二叉树节点,我们用到了递归,说实话,这次练习让我喜欢
上的递归,虽然XXX的情况下,递归的不是很好,但是递归还是很强大的。
复制代码 代码如下: #region 清空二叉树 /// <summary> /// 清空二叉树 /// </summary> /// <typeparam></typeparam> /// <param></param> public void BinTreeClear<T>(ChainTree<T> tree) { //递的结束点,归的起始点 if (tree == null) return;
BinTreeClear(tree.left); BinTreeClear(tree.right);
//在归的过程中,释放当前节点的数据空间 tree = null; } #endregion
最后上一下总的代码
复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ChainTree { public class Program { static void Main(string[] args) { ChainTreeManager manager = new ChainTreeManager();
//插入节点操作 ChainTree<string> tree = CreateRoot();
//插入节点数据 AddNode(tree);
//先序遍历 Console.WriteLine("n先序结果为: n"); manager.BinTree_DLR(tree);
//中序遍历 Console.WriteLine("n中序结果为: n"); manager.BinTree_LDR(tree);
//后序遍历 Console.WriteLine("n后序结果为: n"); manager.BinTree_LRD(tree);
//层次遍历 Console.WriteLine("n层次结果为: n"); manager.Length = 100; manager.BinTree_Level(tree);
Console.WriteLine("n树的深度为:" + manager.BinTreeLen(tree) + "n");
Console.ReadLine();
}
#region 生成根节点 /// <summary> /// 生成根节点 /// </summary> /// <returns></returns> static ChainTree<string> CreateRoot() { ChainTree<string> tree = new ChainTree<string>();
Console.WriteLine("请输入根节点,方便我们生成树n");
tree.data = Console.ReadLine();
Console.WriteLine("根节点生成已经生成n");
return tree; } #endregion
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|