一、基础知识
- 链表:链表在内存中的存储可以不是一段连续的区域。
class ListNode {
int val;
ListNode next;
}
- 树:链表的一个延伸,有多个结点。不管是两个节点还是多个节点,树当中是有层级关系的。邻居的关系,这里也没有层级结构了,每个节点都是平等的。
class TreeNode {
int val;
List<TreeNode> children;
}
- 图:有向图,只能单向行驶,A→B,但是B不能到A;无向图,A↔B。
class GraphNode {
int val;
List<Integer> neighbors;
}
二、BFS的思想
对于一个树或者图,从选取的第一个点开始,把第一个节点和它的邻居加入到答案中去,他的邻居还会有其他的邻居,所以要继续这个过程,知道所有的元素全部被找到。
三、BFS解决的问题种类
- 层级遍历:把一层找到的东西放在一起。
- 遍历图:给定连通图上面的一个节点,需要找到这个图中的所有节点。
- 拓扑排序。
- 找出图上两点的最短路径:有条件的,就是这个图必须是简单的连通图(无权重)。
四、对称二叉树( LeetCode 第 101 号问题)
1.题目描述
2.代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)
return true;
return isMirror(root->left,root->right);
}
bool isMirror(TreeNode* left1,TreeNode* right1)
{
if(left1==NULL&&right1==NULL)
return true;
if(left1==NULL||right1==NULL)
return false;
if(left1->val!=right1->val)
return false;
return isMirror(left1->left,right1->right)&&isMirror(left1->right,right1->left);
}
};