PHP面试问题,有大佬知道这个怎么写吗
回答:
1、找到第一层,然后根据第一层进行递归查找即可
2、这道算法题对于初学者而言的确有点绕,希望好好研究一下我写逻辑哈
- PHP代码如下:
<?php$tree = [
['node' => 2, 'children' => [3, 9, 4]],
['node' => 7, 'children' => [2]],
['node' => 3, 'children' => [6]],
['node' => 4, 'children' => [5]],
['node' => 5, 'children' => [8]],
['node' => 10, 'children' => [11]]
];
// 先将子元素合并
$children = [];
foreach ($tree as $k => $v) {
$children = array_merge($children, $v['children']);
}
// 找出第一层
$loop = [];
foreach ($tree as $item) {
if (!in_array($item['node'], $children)) {
$loop[] = $item['node'];
}
}
// 递归找结果
function recursion(&$tree, $loop)
{
// 一定要加staic,不然每次进来就清空了
static $result = [];
$result = array_merge($result, $loop);
if ($tree) {
$next_children = [];
foreach ($tree as $k => $item) {
if (in_array($item['node'], $loop)) {
// 下一次要循环的元素
$next_children = array_merge($next_children, $item['children']);
// 找完就删除
unset($tree[$k]);
}
}
// 递归查找
return recursion($tree, $next_children);
} else {
// 返回最终结果
return $result;
}
}
$result = recursion($tree, $loop);
print_r($result);
// 结果
// Array ( [0] => 7 [1] => 10 [2] => 2 [3] => 11 [4] => 3 [5] => 9 [6] => 4 [7] => 6 [8] => 5 [9] => 8 )
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
回答:
写一下伪代码。
- 遍历一下整个数组,设定children->parent关系,例如2->7,3->2,9->2,4->2,以此类推。
- 没有children->parent关系的节点,为根节点,如7,10
- 以7,10节点为开始,做广度优先遍历。第一层7,10。第二层遍历7,10的children 2,11。第三层遍历2,11的children 3,9,4,以此类推。
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
回答:
做树形整理,把树高弄出来,然后按树高+根节点+父节点的方式排序输出就行了。
这种应该是把逻辑写清楚,代码意思差不多就行了,好几十行写的也累看的也累,运行基本不可能一次过。
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
回答:
不会写php,写了个python参考一下吧, 就是基础的广度优先搜索(bfs).
from typing import *from collections import Counter
import queue
tree = {
2: [3, 9, 4],
7: [2],
3: [6],
4: [5],
5: [8],
10: [11]
}
degree = Counter()
for k in tree.keys():
degree[k] = 0
for vs in tree.values():
for v in vs:
degree[v] += 1
q = queue.Queue()
ans = []
for k, v in degree.items():
if v == 0:
q.put(k)
while not q.empty():
node = q.get()
ans.append(node)
if node in tree:
for nxt in tree[node]:
q.put(nxt)
print(ans)
以上是 PHP面试问题,有大佬知道这个怎么写吗 的全部内容, 来源链接: utcz.com/p/944505.html