老师有个问题
来源:1-1 工程初始化
qq_Unique彼岸花丶花海_0
2021-07-20 16:21:10
请用js实现一个函数,实现打印二叉树每一行的元素的功能。
第一个问题是请设计一种数据结构存储这个数据,并存储在变量tree中。
第二实现函数printTree,使得 console.log(printTree(tree)) 的输出如下:
1 A
2 BD
3 CEFG
4 HIJ
这个是怎么做的
1回答
同学你好,本站的教学服务只包含站内视频内容问题解答、站内习题问题解答、站内作业问题解答、站内测试题问题解答以及站内产品使用问题解答。故同学的问题不包含在教学服务内,本次老师破例为同学讲解一下,下不为例哦。
针对同学的问题,解答如下:
1、二叉树是一种特殊的树,表现在它的子节点个数不超过两个。且二叉树的子树有左右之分,节点结构至少有三部分组成,如下图所示:
data是节点的值,left指向左子节点,right指向右子节点,映射到同学提供的这个图,以A为例,data表示的是A,left指向B节点,right指向D节点。
代码参考:
function TreeNode(val) {
this.val = val
this.left = null
this.right = null
}
let tree = new TreeNode('A')
let nodeB = new TreeNode('B')
let nodeC = new TreeNode('C')
let nodeD = new TreeNode('D')
let nodeE = new TreeNode('E')
let nodeF = new TreeNode('F')
let nodeG = new TreeNode('G')
let nodeH = new TreeNode('H')
let nodeI = new TreeNode('I')
let nodeJ = new TreeNode('J')
tree.left = nodeB
tree.right = nodeD
nodeB.left = nodeC
nodeB.right = nodeE
nodeD.left = nodeF
nodeD.right = nodeG
nodeE.left = nodeH
nodeE.right = nodeI
nodeG.left = nodeJ
2、printTree函数实现可以参考下方:
<script>
function TreeNode(val) {
this.val = val
this.left = null
this.right = null
}
let tree = new TreeNode('A')
let nodeB = new TreeNode('B')
let nodeC = new TreeNode('C')
let nodeD = new TreeNode('D')
let nodeE = new TreeNode('E')
let nodeF = new TreeNode('F')
let nodeG = new TreeNode('G')
let nodeH = new TreeNode('H')
let nodeI = new TreeNode('I')
let nodeJ = new TreeNode('J')
tree.left = nodeB
tree.right = nodeD
nodeB.left = nodeC
nodeB.right = nodeE
nodeD.left = nodeF
nodeD.right = nodeG
nodeE.left = nodeH
nodeE.right = nodeI
nodeG.left = nodeJ
function printTree(tree) {
let currentLevel = 1
// 存放节点
let stack = []
// 把tree放到数组中
stack.push(tree)
// 最终的结果数组
let result = []
// 判断stack里有没有内容
while (stack.length > 0) {
let text = currentLevel.toString()
let count = stack.length
// 判断数组的长度
while (count > 0) {
// 取到数组的第一项
let node = stack.shift()
// text与node.val拼接
text += node.val
// 如果有左右节点,就存到stack中
if (node.left) {
stack.push(node.left)
}
if (node.right) {
stack.push(node.right)
}
count -= 1
}
result.push(text)
currentLevel += 1
}
// 把结果返回
return result.join("\n")
}
console.log(printTree(tree))
</script>
不明白的地方可以打印在控制台看结果,另外:如果想了解二叉树相关知识,可以在站内搜索一下。祝学习愉快~
相似问题