-
不同于二叉树,普通的树可以有多个分支。需要将所有分支装在一个集合中,并逐一递归搜索。
-
代码实现:
//普通树结点 public class MapNode { public int val; public List<MapNode> neighbor;//表示当前节点的所有分支节点 public MapNode(int val) { this.val = val; neighbor = new ArrayList<>(); } }
// 树的深度优先搜索 public static boolean deepSearch(MapNode root, int target){ if (root == null) return false; if(root.val== target) return true; boolean result = false; for(MapNode temp : root.neighbor){//将树的所有子节点遍历查找,往下递归 result |= deepSearch(temp,target); } return result; }
测试:
public class Main { public static void main(String[] args) { MapNode n1 = new MapNode(1); MapNode n2 = new MapNode(2); MapNode n3 = new MapNode(3); MapNode n4 = new MapNode(4); MapNode n5 = new MapNode(5); MapNode n6 = new MapNode(6); MapNode n7 = new MapNode(7); MapNode n8 = new MapNode(8); MapNode n9 = new MapNode(9); n1.neighbor.add(n2); n1.neighbor.add(n3); n1.neighbor.add(n4); n2.neighbor.add(n5); n2.neighbor.add(n6); n3.neighbor.add(n7); n4.neighbor.add(n8); n5.neighbor.add(n9); System.out.println(deepSearch(n1,6));//true System.out.println(deepSearch(n1,10));//fasle } }
树的深度优先搜索
最新推荐文章于 2024-04-12 14:49:55 发布