问题描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。
DFS求解:定义一个全局的链表,用来装所有的结果,通过DFS遍历,一旦遍历到当前节点没有子节点,则将该节点加入链表后放入全局链表中,如果当前节点有两个子节点,则新生成一个从父节点传下来的链表,并进行两个分支的递归求解。
public void dfs(TreeNode root,List<TreeNode>list,List<List<TreeNode>>res) { if(root.left==null&&root.right==null) { list.add(root); res.add(list); return; }else if(root.left!=null&&root.right==null) { list.add(root); dfs(root.left,list,res); }else if(root.right!=null&&root.left==null) { list.add(root); dfs(root.right,list,res); }else { list.add(root); List<TreeNode>list1=new LinkedList(list); dfs(root.left,list,res); dfs(root.left,list1,res); } } public List<List<TreeNode>>Dfs(TreeNode root) { List<List<TreeNode>>res=new List<List<TreeNode>>(); List<TreeNode>list=newLinkedList<>(); dfs(root,list,res); ???????return res; }
BFS求解:
public List<List<TreeNode>>bfs(TreeNode root) { Queue<TreeNode>queue=new LinkedList<>(); Queue<List<TreeNode>>queueList=new Linkedlits<>(); List<TreeNode>list=new LinkedLits<>(); list.add(root); queue.add(root); queueList.add(list) while(!queue.isEmpty()) { List<TreeNode>tempList=queueList.poll(); TreeNode tempNode=queue.poll(); if(tempNode.left==null&&tempNode.right==null) { res.add(tempList); }else if(tempNode.left!=null&&tempNode.right==null) { tempList.add(tempNode.left); queue.add(tempNode.left); }else if(tempNode.right!=null&&tempNode.left==null) { tempList.add(tempNode.right); queue.add(tempNode.right); }else { List<TreeNode>newList1=new LinkedList<>(tempList); tempList.add(tempNode.left); queueList.add(tempList); newList1.add(tempNode.right); queuelist.add(newList1); } } return res; }