DFS
深度遍历:先从根节点出发,沿着左子树进行纵向遍历直到找到叶子节点为止。然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点为止。
DFS可以用栈来解决,具体来看下代码
import java.util.*;
/**
* 该类用来编写DFS遍历
*/
public class Main {
public static void main(String[] args) {
//用来测试代码是否正确
TreeNode treeNode = new TreeNode(1);
TreeNode treeNode2 = new TreeNode(2);
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode5 = new TreeNode(5);
TreeNode treeNode6 = new TreeNode(6);
TreeNode treeNode7 = new TreeNode(7);
treeNode.left = treeNode2;
treeNode.right = treeNode3;
treeNode2.left = treeNode4;
treeNode2.right = treeNode5;
treeNode3.left = treeNode6;
treeNode3.right = treeNode7;
List<Integer> list = DFS(treeNode);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static List<Integer> DFS(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
//创建list集合用来保存结点中的数值
List<Integer> list = new ArrayList<>();
while (!stack.isEmpty()){
TreeNode temp = stack.pop();
list.add(temp.val);
if(temp.right != null){
stack.add(temp.right);
}
if(temp.left != null){
stack.add(temp.left);
}
}
return list;
}
}
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;
}
}
也可以递归解决,具体来看下代码
import java.util.*;
/**
* 该类用来编写DFS遍历
*/
public class Main {
private static List<Integer> list = new ArrayList<>();
public static void main(String[] args) {
//用来测试代码是否正确
TreeNode treeNode = new TreeNode(1);
TreeNode treeNode2 = new TreeNode(2);
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode5 = new TreeNode(5);
TreeNode treeNode6 = new TreeNode(6);
TreeNode treeNode7 = new TreeNode(7);
treeNode.left = treeNode2;
treeNode.right = treeNode3;
treeNode2.left = treeNode4;
treeNode2.right = treeNode5;
treeNode3.left = treeNode6;
treeNode3.right = treeNode7;
List<Integer> list = DFS(treeNode);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static List<Integer> DFS(TreeNode root){
if(root == null){
return null;
}
list.add(root.val);
if(root.left != null) DFS(root.left);
if(root.right != null) DFS(root.right);
return list;
}
}
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;
}
}