📣 独立日限时特惠: VIP通行证立减$68
123
返回列表 发新帖
楼主: dadadaxian
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家电面

🔗
qaert 2018-11-8 13:38:14 | 只看该作者
全局:
littledog 发表于 2018-3-28 07:18
感觉就是建一个tree node wrapper node把原节点包进去,然后遍历原树通过wrapper把原来树的结构记录下来, ...

为什么要新建一个wrapper node 类呢?用原treenode 也可以做吧?跑了一下感觉差不多
  1. class Solution {
  2.     public TreeNode shuffleTreeNodes(TreeNode root) {
  3.         List<TreeNode> list = new ArrayList<>();
  4.         // 建一棵与原树结构完全一样的树
  5.         TreeNode structureRoot = buildStructure(root, list);
  6.         Collections.shuffle(list);
  7.         // 用原结点按照结构树重构一棵树
  8.         return shuffleTree(structureRoot, list.iterator());
  9.     }

  10.     private TreeNode buildStructure(TreeNode root, List<TreeNode> list) {
  11.         if (root == null) {
  12.             return null;
  13.         }
  14.         
  15.         list.add(root);
  16.         TreeNode structureRoot = new TreeNode(-1);
  17.         structureRoot.left = buildStructure(root.left, list);
  18.         structureRoot.right = buildStructure(root.right, list);
  19.         return structureRoot;
  20.     }

  21.     private TreeNode shuffleTree(TreeNode structureRoot, Iterator<TreeNode> it) {
  22.         if (structureRoot == null) {
  23.             return null;
  24.         }
  25.         
  26.         TreeNode root = it.next();
  27.         root.left = shuffleTree(structureRoot.left, it);
  28.         root.right = shuffleTree(structureRoot.right, it);
  29.         return root;
  30.     }
  31. }
复制代码
回复

使用道具 举报

🔗
burnmg 2018-11-28 06:43:27 | 只看该作者
全局:
递归思路这题不难。

每一个子问题的操作是,当前node,左node,右node,旋转一下。只旋转三个Node,不改变sub tree
bottom up的方式,一直递归解决。最后是root。返回tree即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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