ADT
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
构建二叉树
public static void main(String[] args) {
TreeNode node4 = new TreeNode(4);
TreeNode node2 = new TreeNode(2);
TreeNode node6 = new TreeNode(6);
TreeNode node5 = new TreeNode(5);
TreeNode node3 = new TreeNode(3);
TreeNode node1 = new TreeNode(1);
node2.left = node3;
node2.right = node4;
node1.left = node2;
node1.right = node5;
node5.right = node6;
TreeDfs dfs = new TreeDfs();
dfs.bfs(node1);
}
深度优先搜索遍历
public void dfs(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.val);
dfs(root.left);
dfs(root.right);
}
广度优先搜索遍历
public void bfs(TreeNode node) {
ArrayDeque<TreeNode> q = new ArrayDeque();
q.add(node);
while (q.size() > 0) {
TreeNode node1 = q.pop();
System.out.print(node1.val);
if (node1.left != null) {
q.add(node1.left);
}
if (node1.right != null) {
q.add(node1.right);
}
}
}
使用bfs记录树层级
添加map记录node与层数。
public void bfsWithLevel(TreeNode node) {
ArrayDeque<TreeNode> q = new ArrayDeque();
Map<TreeNode, Integer> tmp = new HashMap<>();
tmp.put(node, 0);
q.add(node);
while (q.size() > 0) {
TreeNode node1 = q.pop();
System.out.println(node1.val + " >>>> " + tmp.get(node1));
if (node1.left != null) {
q.add(node1.left);
tmp.put(node1.left, tmp.get(node1) + 1);
}
if (node1.right != null) {
q.add(node1.right);
tmp.put(node1.right, tmp.get(node1) + 1);
}
}
}