
递归算法
好好先生_山楂树
爱好广泛,想当TA
展开
-
C/C++递归算法,将二叉树中所有结点的左,右子树相互交换
关键思想:将大问题转换为小问题,先从树梢开始交换即树的叶子到树根。关键代码:void changeTree(BiTree& T)//交换左右子树{ if (T) { if (T->lchild || T->rchild)//判断该结点是否存在左右子树 { changeTree(T->lchild);//先转换左子树的左右子树 changeTree(T->rchild);//再转换右子树的左右子树 BiTree temp;//最后转换自原创 2021-11-02 21:56:13 · 1981 阅读 · 0 评论 -
C/C++递归算法,计算二叉树中叶子结点的数目
关键思路:叶子结点的度为0,即没有左孩子和右孩子关键代码:int searchNum(BiTree T){ if (!T) return 0; else { int l, r; l=searchNum(T->lchild); r=searchNum(T->rchild); if ((l == 0 && r == 0))//判断是否遍历到度为0及叶子结点 number++; return 1; }}代码实现:头文件的实现原创 2021-11-02 21:41:51 · 1827 阅读 · 0 评论 -
C/C++ 用递归(分治法)解决多米诺骨牌问题
问题:现有 n 块“多米诺骨牌” s1, s2, · · · , sn 水平放成一排,每块骨 牌 si 包含左右两个部分,每个部分赋予一个非负整数值,骨牌可做 180 度旋转,使得原来在左边的值变到右边,而原来 在右边的值移到左边,假设不论 si 如何旋转,L[i] 总是存储 si 左边的值,R[i] 总是存储 si 右边的值,status[i] 用于存储 si 的状态:当 L[i] ≤ R[i] 时记为 0,否 则记为 1,试采用分治法设计算法 求 =R[i]·L[i+ 1] 的最大值,以及当...原创 2021-11-02 21:08:11 · 1672 阅读 · 0 评论