网站建设公司特点,麻阳建设局网站,网站建设seo基本要求,网站建设php的心得和体会近段时间去面试的时候#xff0c;被面试官问到如何遍历查询一个颗树的时候#xff0c;可能最近自己看了数据结构的书之后#xff0c;隐隐约约就想到二叉树的三种排序#xff08;前序、中序、后序#xff09;#xff0c;但是当时自己没有想起这三种排序的名字#xff0c;…近段时间去面试的时候被面试官问到如何遍历查询一个颗树的时候可能最近自己看了数据结构的书之后隐隐约约就想到二叉树的三种排序前序、中序、后序但是当时自己没有想起这三种排序的名字只是回答说好像有三种但是当时面试官好像突然明白了说你是不是想说前序、中序、后序我回答说是的然后面试官淡淡回了一句说不是后面我回去查了下才知道不是突然间顿悟了不就是我们经常所说的递归吗感觉自己回答到点子上面 但是只回递归的话无法加分的从网上查了之后才知道除了递归还有循环再拓展一点大体分为深度优先遍历和广度优先遍历两种方法下面我们逐一讲解。 我们正常的思维或许第一采取的就是深度优先遍历然后用递归实现如下 先定义一颗树
let tree [
{id: 1,name: 节点1,children: [{id: 1-1,name: 节点1-1}]
},
{id: 2,name: 节点2,children: [{id: 2-1,name: 节点2-1},{id: 2-2,name: 节点2-2,children: [{id: 2-2-1,name: 节点2-2-1}]}]
},
{id: 3,name: 节点3
}
]然后用递归实现
function treeIterator(tree, func) {tree.forEach((node) {func(node)node.children treeIterator(node.children, func)})
}用循环实现的方法
function treeIterator(tree, func) {let node, curTree [...tree]while ((node curTree.shift())) {func(node)node.children curTree.unshift(...node.children)}
}打印出来
节点1 节点1-1 节点2 节点2-1 节点2-2 节点2-2-1 节点3...如果再问你用了什么数据结构怎么回答呢 答案用了栈先进后出 广度优先遍历 循环实现
function treeIterator(tree, func) {let node, curTree [...tree]while ((node curTree.shift())) {func(node)node.children curTree.push(...node.children)}
}打印出来
节点1 节点2 节点3 节点1- 1节点2-1 节点2-2 节点2-2-1...继续问用了什么数据结构 答案用了队列先进先出
参考博客https://blog.csdn.net/w544924116/article/details/119712713?spm1001.2014.3001.5506