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; } }
BinTreeAddNode(tree.left, node, data, direction); BinTreeAddNode(tree.right, node, data, direction);
return tree; } #endregion
<3> 查找节点
二叉树中到处都散发着递归思想,很能锻炼一下我们对递归的认识,同样查找也是用到了递归思想。
复制代码 代码如下: #region 在二叉树中查找指定的key /// <summary> ///在二叉树中查找指定的key /// </summary> /// <typeparam></typeparam> /// <param></param> /// <param></param> /// <returns></returns> public ChainTree<T> BinTreeFind<T>(ChainTree<T> tree, T data) { if (tree == null) return null;
if (tree.data.Equals(data)) return tree;
return BinTreeFind(tree, data); } #endregion
<4> 计算深度
这个问题纠结了我二个多小时,原因在于没有深刻的体会到递归,其实主要思想就是递归左子树和右子树,然后得出较大的一个。
复制代码 代码如下: #region 获取二叉树的深度 /// <summary> /// 获取二叉树的深度 /// </summary> /// <typeparam></typeparam> /// <param></param> /// <returns></returns> public int BinTreeLen<T>(ChainTree<T> tree) { int leftLength; int rightLength;
if (tree == null) return 0;
//递归左子树的深度 leftLength = BinTreeLen(tree.left);
//递归右子书的深度 rightLength = BinTreeLen(tree.right);
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|