需求
给定一颗二叉树,返回它的广度优先遍历(层次遍历)
我们只需要先按照层次遍历创建一颗二叉树,然后遍历将其复原即可
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| let arr = ['a', 'b', 'c', 'd', '#', '#', 'e', '#', 'f', '#', '#', '#', '#']; function TreeNode(val){ this.val = val; this.left = null; this.right = null; } function createTree_levelorder(arr){ let rootval = arr.shift(); let queue = []; if(rootval){ let root = new TreeNode(rootval); queue.push(root); while(queue.length){ let node = queue.shift(); let leftval = arr.shift(); let rightval = arr.shift(); if(leftval!=='#'){ let leftnode = new TreeNode(leftval); queue.push(leftnode); node.left = leftnode; } if(rightval!=='#'){ let rightnode = new TreeNode(rightval); queue.push(rightnode); node.right = rightnode; } } return root; } } function bfs(root){ let res = []; let queue = []; if(root){ queue.push(root); res.push(root.val); while(queue.length){ let node = queue.shift() if(node.left){ queue.push(node.left); res.push(node.left.val); }else{ res.push('#'); } if(node.right){ queue.push(node.right); res.push(node.right.val); }else{ res.push('#'); } } } return res; } let root = createTree_levelorder(arr); console.log(bfs(root));
|