加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

算法系列15天速成 第十一天 树操作(上)

发布时间:2020-03-14 19:10:46 所属栏目:安全 来源:站长网
导读:我们可以对”线性结构“改造一下,变为”一个节点最多有一个前驱“和”多个后继“。哈哈,这就是我们今天说的”树“

#region 判断二叉树是否为空
        /// <summary>
/// 判断二叉树是否为空
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <returns></returns>
        public bool BinTreeisEmpty<T>(ChainTree<T> tree)
        {
            return tree == null ? true : false;
        }
        #endregion

#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

#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

#region 二叉树的先序遍历
        /// <summary>
/// 二叉树的先序遍历
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
        public void BinTree_DLR<T>(ChainTree<T> tree)
        {
            if (tree == null)
                return;

//先输出根元素
            Console.Write(tree.data + "t");

//然后遍历左子树
            BinTree_DLR(tree.left);

//最后遍历右子树
            BinTree_DLR(tree.right);
        }
        #endregion

#region 二叉树的中序遍历
        /// <summary>
/// 二叉树的中序遍历
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
        public void BinTree_LDR<T>(ChainTree<T> tree)
        {
            if (tree == null)
                return;

//优先遍历左子树
            BinTree_LDR(tree.left);

//然后输出节点
            Console.Write(tree.data + "t");

//最后遍历右子树
            BinTree_LDR(tree.right);
        }
        #endregion

#region 二叉树的后序遍历
        /// <summary>
/// 二叉树的后序遍历
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
        public void BinTree_LRD<T>(ChainTree<T> tree)
        {
            if (tree == null)
                return;

//优先遍历左子树
            BinTree_LRD(tree.left);

//然后遍历右子树
            BinTree_LRD(tree.right);

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读