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

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

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

if (leftLength > rightLength)
                return leftLength + 1;
            else
                return rightLength + 1;
        }
        #endregion

<5>  遍历结点

二叉树中遍历节点的方法还是比较多的,有“先序”,“中序”,“后序”,“按层”,其实这些东西只可意会,不可言传,真的很难在口头

上说清楚,需要反复的体会递归思想。

先序:先访问根,然后递归访问左子树,最后递归右子树。(DLR模式)

中序:先递归访问左子树,在访问根,最后递归右子树。(LDR模式)

后序:先递归访问左子树,然后递归访问右子树,最后访问根。(LRD模式)

按层:这个比较简单,从上到下,从左到右的遍历节点。

复制代码 代码如下:


#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);

//最后输出节点元素
            Console.Write(tree.data + "t");
        }
        #endregion

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

//申请保存空间
            ChainTree<T>[] treeList = new ChainTree<T>[Length];

int head = 0;
            int tail = 0;

//存放数组
            treeList[tail] = tree;

//循环链中计算tail位置
            tail = (tail + 1) % Length;

(编辑:焦作站长网)

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

热点阅读