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;
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|