最近一周在LeetCode上刷了一些基础的深度优先遍历(DFS)算法题,有一些简单的心得体会。
对于二叉树来说,使用DFS能够很简单的得到其前序,中序,后序排序。
基本模板如下:
--二叉树数据结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
List<Integer> ans = new ArrayList<>();
//先序遍历-->根左右
public void dfs(TreeNode treeNode) {
ans.add(treeNode.val);
dfs(treeNode.left);
dfs(treeNode.right);
}
//中序遍历-->左根右
public void dfs(TreeNode treeNode) {
dfs(treeNode.left);
ans.add(treeNode.val);
dfs(treeNode.right);
}
//中序遍历-->左右根
public void dfs(TreeNode treeNode) {
dfs(treeNode.left);
dfs(treeNode.right);
ans.add(treeNode.val);
}
从而可以应用来进行判断两个二叉树是否相等,二叉树是否镜像等等问题。
特别注意,对于二叉搜索树来说,中序遍历就是递增有序排列,可以用来解决一些问题。