老师有个问题

来源:1-1 工程初始化

qq_Unique彼岸花丶花海_0

2021-07-20 16:21:10

请用js实现一个函数,实现打印二叉树每一行的元素的功能。

http://img.mukewang.com/climg/60f6874b09ce58cf02800388.jpg

第一个问题是请设计一种数据结构存储这个数据,并存储在变量tree中。

第二实现函数printTree,使得 console.log(printTree(tree)) 的输出如下:

1 A

2 BD

3 CEFG

4 HIJ

这个是怎么做的


写回答

1回答

好帮手慕言

2021-07-20

同学你好,本站的教学服务只包含站内视频内容问题解答、站内习题问题解答、站内作业问题解答、站内测试题问题解答以及站内产品使用问题解答。故同学的问题不包含在教学服务内,本次老师破例为同学讲解一下,下不为例哦。

针对同学的问题,解答如下:

1、二叉树是一种特殊的树,表现在它的子节点个数不超过两个。且二叉树的子树有左右之分,节点结构至少有三部分组成,如下图所示:

http://img.mukewang.com/climg/60f69ff3098b098b06790214.jpg

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>

不明白的地方可以打印在控制台看结果,另外:如果想了解二叉树相关知识,可以在站内搜索一下。祝学习愉快~

0
hq_Unique彼岸花丶花海_0
hp>好的谢谢老师

h021-07-20
共1条回复

0 学习 · 15276 问题

查看课程