二叉树的所有路径(所有从根节点到叶子节点的路径)-257 ...

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578

题目形貌

给你一个二叉树的根节点 root ,按 恣意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
解题思绪

这道题我们采用二叉树里的前序遍历方式,我们要遍历所有到叶子节点的路径,我们采用复用的思想,就是让这里的几个数据布局我们可以重复使用,但是重复使用也就带来数据不一致的情况,我们用一个temp集合来存储遍历路上遇到的元素,但是这里的元素我们肯定是要变化的,你遍历了左叶子节点,那下次你遍历右叶子节点的时候你就要把左叶子节点的值给从我们这个temp集合中去除,以是这里就体现了回溯的思想,一层一层的往上回溯,直到最后回溯的只剩下了根节点,然后再同样的方法去遍历根节点的右子树。
代码实例
  1. class Solution {
  2.     public List<String> binaryTreePaths(TreeNode root) {
  3.         List<String> result = new ArrayList<>();
  4.         List<Integer> temp = new ArrayList<>();
  5.         travel(root, temp, result);
  6.         return result;
  7.     }
  8.     public void travel(TreeNode root, List<Integer> temp, List<String> result) {
  9.         temp.add(root.val);
  10.         if (root.left == null && root.right == null) {
  11.             result.add(zhuanhua(temp));
  12.             return;
  13.         }
  14.         if (root.left != null) {
  15.             travel(root.left, temp, result);
  16.             //这里就是回溯的思想,先让底下的节点一层一层遍历然后回溯去除相应的值,再到这里的根节点就只剩下了根节点,然后就可以去遍历右子树了
  17.             temp.remove(temp.size()- 1);
  18.         }
  19.         
  20.         if (root.right != null) {
  21.             travel(root.right, temp, result);
  22.             temp.remove(temp.size()- 1);
  23.         }
  24.     }
  25.    
  26.     public String zhuanhua(List<Integer> num) {
  27.         String sl = "";
  28.         for (int i = 0; i < num.size(); i++) {
  29.             if (i != num.size() - 1) {
  30.                 sl += (num.get(i) + "->");
  31.             } else {
  32.                 sl += num.get(i);
  33.             }
  34.         }
  35.         return sl;
  36.     }
  37. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表