
第五章
sigd
这个作者很懒,什么都没留下…
展开
-
18946 小美的送花线路
第二个问题,送花任务实际路程,因为送完树结构的每个分支都必须回到花店(树根),再去往下一个分支,因此选择最长的一个分支最后送达,才能使得路程最短。就是说大多数边都要走两次(有去有回),唯有距离起点最远的路径上的边只走一次,因此需要找到距离起点最远的结点。第一个问题,起点到所有结点距离和,从起点用搜索算法(dfs或bfs)计算出起点到所有点的距离,再求和即可。树的问题通常要用图的存储方式,并不需要转换成二叉树存储。原创 2024-04-20 09:40:03 · 242 阅读 · 0 评论 -
18929 最优二叉树
划重点:二叉树必用二分递归的算法。此题目初学者理解比较困难,需要有dfs算法基础,且熟悉二叉树算法。解题思路:拿到问题之后,先用暴力枚举的思路去思考解法。首先任何一个点都可能是树根,假设我们选择第i个点作为树根,那么树结构就是左子树[1,i-1] ,树根i,右子树 [i+1,n]。在[1,i-1]中要选择一个点作为左子树树根(假设是j),在[i+1,n]中选一个点作为右子树的树根(假设是k),那么结果就是:左子树(根为j时)的最优值+a[j]*a[i]+右子树(根为k)最优值+a...原创 2022-04-14 21:11:48 · 862 阅读 · 0 评论 -
19081 树上摘樱桃
用了一个二维数组作为二叉树的存储结构。数组中第i行存储结点i的左子树和右子树的下标。解题思路:做一次遍历,检查每个结点是否是樱桃结点。#include <bits/stdc++.h>//ASItypedef long long ll;using namespace std;int t[105][2],n,m,ans=0;void dfs(int root){ if(root==0) return; int lchild=t[root]...原创 2022-04-14 20:23:47 · 551 阅读 · 0 评论 -
二叉树的基础算法综述
二叉树是一种递归定义的数据结构,自然而然地其算法大多也都采用递归的形式。二叉树的基础算法包括且不限于:(1)二叉树的建立(2)二叉树的三种遍历(3)二叉树各类结点数计算(度为2,1,0的个数)(4)二叉树的高度(5)二叉树的宽度(6)二叉树的直径(7)二叉树的公共祖先(8)二叉树的两种遍历序列推出第三种序列二叉树的这些算法使用的是相同的算法模板,本文将会依次介绍这几种算法的具体写法。二叉树的二叉链表存储结构定义与基础算法模板:typedef struct B..原创 2022-04-12 22:03:11 · 1559 阅读 · 3 评论