LintCode 69. 二叉树的层次遍历

69二叉树的层次遍历

描述

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

样例

给一棵二叉树 {3,9,20,#,#,15,7} :

  3
 / \
9  20
  /  \
 15   7

返回他的分层遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

挑战

挑战1:只使用一个队列去实现它

挑战2:用DFS算法来做

题目链接:https://www.lintcode.com/problem/binary-tree-level-order-traversal/description

解题思路1:(队列实现)同BFS,队列用于存储节点。首先把root节点存入队列,遍历整个队列,直到队列为空跳出循环。取当前队列中的节点个数n,表示该层的节点个数,把队列中的所有节点值存入当前层的vector数组,并把这些节点的左节点和右节点存入队列,队列前n个节点pop出队列。进入下一层(即新增一个一维数组)。

class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Level order a list of lists of integer
     */
    vector > levelOrder(TreeNode * root) {
        // write your code here
        queue  q;
        q.push(root);
        vector > ans;
        if(root == NULL)
            return ans;
        while(!q.empty()){
            int len = q.size();
            vector a;
            while(len--){
                TreeNode* nd = q.front();
                if(nd->left != NULL){
                    q.push(nd->left);
                }
                if(nd->right != NULL){
                    q.push(nd->right);
                }
                a.push_back(nd->val);
                q.pop();
            }
            ans.push_back(a);
        }
        return ans;
    }
};
解题思路2:(用DFS)递归遍历节点,首先定义全局二维vector数组,每一层dfs传入两个参数:当前节点和层编号,如果该节点非空,则把节点值存入该层的一维数组,再遍历左节点和右节点,传入的层编号+1。注意首次进入新的一层新建一个空一维数组。
class Solution {
public:
    /**
     * @param root: A Tree
     * @return: Level order a list of lists of integer
     */
    vector > ans;
    void dfs(TreeNode* nd,int level){
        if(nd == NULL){
            return;
        }
        if(level >= ans.size()){
            vector a;
            ans.push_back(a);
        }
        ans[level].push_back(nd->val);
        if(nd->left != NULL){
            dfs(nd->left,level + 1);
        }
        if(nd->right != NULL){
            dfs(nd->right,level + 1);
        }
    }
    vector > levelOrder(TreeNode * root) {
        // write your code here
        if(root == NULL)
            return ans;
        dfs(root,0);
        return ans;
    }
};



你可能感兴趣的:(lintcode)