• (剑指Offer)面试题23:从上到下打印二叉树


    题目:

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

    思路:

    很明显,这是一个广度优先遍历。

    需要一个队列容器来保存结点,具体操作:

    1、将根结点压入队列中,并打印根结点;如果根结点有子结点,将左右子结点依次压入队列的尾部;

    2、如果队列不为空,从队列头部取出结点,重复步骤1,直至队列为空。

    推广:

    不管是广度优先遍历一个有向图还是一棵树,都要用到队列;

    第一步就把起始结点(对树而言是根节点)放入队列中;接下来每一次从队列的头部取出一个结点,遍历这个结点之后把从它能到达的结点(对树而言是子结点)都依次放入队列;重复这个遍历过程,直到队列中的结点全部被遍历为止。

    代码:

    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    
    void PrintFromTopToBottom(TreeNode* root){
        if(root==NULL)
            return;
        std::deque<TreeNode*> dequeTree;
        dequeTree.push_back(root);
        TreeNode* node;
        while(!dequeTree.empty()){
            node=dequeTree.front();
            dequeTree.pop_front();
            printf("%d ",node->val);
    
            if(root->left)
                dequeTree.push_back(root->left);
            if(root->right)
                dequeTree.push_back(root->right);
        }
    }
    

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/7fe2212963db4790b57431d9ed259701?rp=1

    AC代码:

    class Solution {
    public:
        vector<int> PrintFromTopToBottom(TreeNode *root) {
    		std::vector<int> data;
            if(root!=NULL){
                std::deque<TreeNode*> dequeTreeNode;
            	dequeTreeNode.push_back(root);
            	TreeNode* node;
            	while(!dequeTreeNode.empty()){
                	node=dequeTreeNode.front();
                	dequeTreeNode.pop_front();
                	data.push_back(node->val);
                
                	if(node->left)
                    	dequeTreeNode.push_back(node->left);
                	if(node->right)
                    	dequeTreeNode.push_back(node->right);
            	}
            }
            return data;
        }
    };
    

      

  • 相关阅读:
    Alpine linux如何配置和管理自定义服务
    nginx仅允许域名访问禁止IP访问
    解决influxdb的log日志输出位置
    python配置文件INI/TOML/YAML/ENV的区别
    window获取本机所有IP
    学习本来的样子
    yum/编译安装Zabbix 5.0 LTS
    redis问题优化
    解决nginx同端口强制跳转https配置ssl证书问题
    通过DNS验证自动申请nginx证书
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4651379.html
Copyright © 2020-2023  润新知