面试题32:从上往下打印二叉树

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

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
class Solution {
public:
    /*
    思路:类似于层次遍历,利用队列。
    先打印根节点,并把根节点左右子节点入队,打印队首元素并出队,将其左右孩子入队...循环如此一直到队列为空。
    */
    vector<int> PrintFromTopToBottom(TreeNode* root) {
        //将vector作为返回值类型
        vector<int> printTree;
        //若为空树,直接返回空的数组
        if(root==nullptr)
            return printTree;

        //建立辅助队列
        queue<TreeNode*> qTree;
        TreeNode *tNode=root;
        //根节点入队
        qTree.push(tNode);
        //若队列不为空且树指针不指向空,执行循环:
        while(!qTree.empty()&&tNode!=nullptr)
        {
            //将队列首元素放入打印数组中
            printTree.push_back(tNode->val);
            //若对手元素左右子树不为空,压入队列
            if(tNode->left)
                qTree.push(tNode->left);
            if(tNode->right)
                qTree.push(tNode->right);
            //队首元素出队
            qTree.pop();
            //tNode赋值为新的队首元素
            tNode=qTree.front();
        }
        return printTree;
    }

};
全部评论

相关推荐

01-29 15:45
已编辑
华中科技大学 前端工程师
COLORSN:可以试一下,小厂看技术栈是不是很落后,如果太拉胯就别去,个人认为有实习氛围比你自己琢磨要高效不少,然后就是小厂其实也有可能会问的很难,这都比较难说,还是看自己项目含金量够不够,寒假还能不能推进学习再选择,毕竟去实习过年就10天假了
点赞 评论 收藏
分享
七牛云头号黑子:人家是过度包装被看出来没过简历,你是包都不包啊兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务