剑指offer(22)从上往下打印二叉树

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

 

题目分析

从下打印就是按层次打印,其实也就是树的广度遍历。

一般来说树的广度遍历用队列,利用先进先出的特点来保存之前节点,并操作之前的节点。

树的深度遍历一般来说用栈或者递归,利用先进后出的特点来保存之前节点,把之前的节点留到后面操作。

 

代码

/* function TreeNode(x) {
 this.val = x;
 this.left = null;
 this.right = null;
 } */
function PrintFromTopToBottom(root) {
  const queue = [],
    res = [];
  if (root === null) {
    return res;
  }
  queue.push(root);
  while (queue.length) {
    const pRoot = queue.shift();
    if (pRoot.left !== null) {
      queue.push(pRoot.left);
    }
    if (pRoot.right !== null) {
      queue.push(pRoot.right);
    }
    res.push(pRoot.val);
  }
  return res;
}

 

此外,我们可以用递归来自己创建完全二叉树来做测试。

function TreeNode(x) {
  this.val = x;
  this.left = null;
  this.right = null;
}
function createTree(n) {
  if (n === 1) {
    return new TreeNode(1);
  }
  const root = new TreeNode(n);
  root.left = createTree(n - 1);
  root.right = createTree(n - 1);
  return root;
}
const tree = createTree(4);

 

posted @ 2018-03-26 01:23  汕大小吴  阅读(1073)  评论(0编辑  收藏  举报