convert tree to completed K siblings tree
就是一棵任意形状的树,给你一个数k,让你把这棵数变成每个节点只有k或者0个孩子的结构,之前某节点孩子不可以变成该节点的祖先,但是可以是兄弟
由于第一题扣细节逻辑花了40分钟(主要是我一开始没有理解面试官的困惑,然后一步一步的解释来着),第二题就说了个思路(我的想法就是层序遍历然后把对应是一层的节点放到一个list里面,然后再把list变回树,大家有没有更好的思路)
public void childrenK(TreeNode root, int k) { if (root == null) { return; } Queue<TreeNode> q1 = new LinkedList<>(); q1.add(root); ArrayList<TreeNode> list = new ArrayList<>(); while (!q1.isEmpty()) { int size = q1.size(); for (int i = 0; i < size; i++) { TreeNode cur = q1.poll();
list.add(cur); ArrayList<TreeNode> curChild = cur.children(); if (curChild != null || curChild.size() != 0) q1.addAll(curChild); } } TreeNode root = new TreeNode(list.remove(0)); Queue<TreeNode> q = new LinkedList<>(); q.add(root); while (!q.isEmpty()) { int size = q.size(); for (int i = 0; i < size; i++) { TreeNode cur = q.poll(); for (int j = 0; j < k; j++) { if (list.size() > 0) { TreeNode chil = new TreeNode(list.remove(0); cur.children.add(chil)); q.add(chil); } } }