408ds专题

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

【408DS算法题】036基础-14年真题_求二叉树的WPL

Index 真题题目分析实现总结 真题题目 二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T ,采用二叉链表存储, 结点结构如下: 其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针, 请设计求T的WPL的算法, 要求: 1 - 给出算法的基本设计思想。 2 - 使用C或C++语言, 给出二叉树结点的数据类型定

【408DS算法题】035进阶-17年真题_二叉树转中缀表达式

Index 真题题目分析实现总结 真题题目 请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。 例如, 当下列两棵表达式树作为算法的输入时, 输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))。 二叉树结点定义如下: typedef struct node {char data[10];

【408DS算法题】033基础-判断二叉树是否是二叉排序树

Index 题目分析实现总结 题目 给定二叉树的根节点root,判断该二叉树是否是二叉排序树。 分析实现 二叉排序树(BST/二叉搜索树):对于每个节点,其左子树中所有节点的值都小于当前结点的值,其右子树中所有节点的值都大于当前结点的值;左子树和右子树本身也是二叉搜索树。 在二叉排序树的定义中含有着递归的思想 - “左子树和右子树本身也是二叉搜索树”,因此可以使用递

【408DS算法题】028基础-查找二叉树的最大值结点

Index 题目分析实现总结 题目 给定二叉树的根节点,找到二叉树中结点值最大的结点。 分析实现 对于查找二叉树中的最大值结点,在二叉树的遍历(DFS、层次遍历)的基础上进行修改可以轻松地达成这一目的。 本文中选用的是相对直观的后序遍历,具体实现如下: BTNode* findMax(BTNode *root){if(root==NULL) return NULL;