ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 ``` /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function PrintFromTopToBottom(root) { var dequeTree=[]; var result=[]; if(!root) return []; dequeTree.push(root); while(dequeTree.length){ pNode = dequeTree.shift(); result.push(pNode.val); if(pNode.left) dequeTree.push(pNode.left); if(pNode.right) dequeTree.push(pNode.right); } return result; } ``` ## 之字形打印二叉树 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 ``` function Print(pRoot) { // write code here if (!pRoot) { return [] } let result = [] let queue = [] let vrse = false queue.push(pRoot) while (queue.length > 0) { let len = queue.length let row = [] for (let i = 0; i < len; i++) { let shiftItem = queue.shift() if (shiftItem.left) { queue.push(shiftItem.left) } if (shiftItem.right) { queue.push(shiftItem.right) } row.push(shiftItem.val) } if (vrse) { reverse(row) result.push(row) } else { result.push(row) } vrse = !vrse } return result } function reverse(arr) { let i = 0 let j = arr.length - 1 while (i < j) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp i++ j-- } } ``` ## 把二叉树打印成多行 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行 利用队列的特性,并且每一轮都删除queue旧的数据 ``` function Print(pRoot) { // write code here if (!pRoot) { return [] } let result = [] let queue = [] queue.push(pRoot) while (queue.length > 0) { let index = 0 let len = queue.length let row = [] while (index < len) { let shiftItem = queue.shift() row.push(shiftItem.val) if (shiftItem.left) { queue.push(shiftItem.left) } if (shiftItem.right) { queue.push(shiftItem.right) } index++ } result.push(row) } return result } ```