zoukankan      html  css  js  c++  java
  • (剑指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;
        }
    };
    

      

  • 相关阅读:
    How do I add elements to a Scala List?
    Can you share some Scala List class examples?
    How to add elements to a List in Scala
    数据结构和算法学习三,之递归和堆栈
    数据结构和算法学习二,之循环和递归
    数据结构和算法学习一,开篇
    Android Skia和2D图形系统 .
    EGL接口介绍-----Android OpenGL ES底层开发
    OpenGL网络资源
    OpenGL—Android 开机动画源码分析二
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4651379.html
Copyright © 2011-2022 走看看