图
对比之前学习过的线性表和树:
【图】线性表有一个且唯一的前后关系,反映一对一的关系,
树有唯一一个父节点,没有后继关系。
而图,反映的正是多对多的关系。
图的表示方式:二维数组(邻接矩阵),链表表示(邻接表)
深度优先搜索(DFS)思想:
从初始结点开始切入,扩展顺序总是先切入最新产生的结点,显然,是一个递归的过程
广度优先搜索(BFS)思想:
总结:广度横向切入,深度纵向切入
从初始结点的那一层开始切入,当目标都不在初始结点那一层时;向下一层切入,第二层的一个结点作为初始点,重复前面的操作,知道找到目标结点。
例题(摘自leetcode):
938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。
示例 1:
输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32
示例 2:
输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23
Java源码:
方法一(深度优先搜索):
public int rangeSumBST(TreeNode root, int L, int R) {
int sum = 0;
return rangeSunBST(root, L, R, sum);
}public int rangeSunBST(TreeNode root, int L, int R, int sum) {
if (root != null) {
if (root.val >= L && root.val <= R) {
sum += root.val;
}
if (root.val < R) {
sum = rangeSunBST(root.right, L, R, sum);
}
if (root.val > L) {
sum = rangeSunBST(root.left, L, R, sum);
}
}
return sum;
}