从上往下打印出二叉树的每个节点,同层节点从左至右打印。
因为对STL的队列不熟悉,这里用vector来实现队列的功能:先进先出
下面有用队列实现的,更加简洁
/* 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<int> printVec; //存储要打印的每个节点的指针 vector<TreeNode*> nodeVec; if(root == nullptr) return printVec; //将根节点加入 nodeVec.push_back(root); //若当前节点有左子节点或者右子节点,则将其加入(先左后右),同时将当前节点的内容加入printVec //然后指向nodeVec中的下一个节点 for(int i = 0; i < nodeVec.size(); i++){ if(nodeVec[i]->left != nullptr) nodeVec.push_back(nodeVec[i]->left); if(nodeVec[i]->right != nullptr) nodeVec.push_back(nodeVec[i]->right); printVec.push_back(nodeVec[i]->val); } return printVec; } };用队列queue实现,更简洁:
/* 链接:https://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701 来源:牛客网 */ class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> res; if(root==NULL) return res; queue<TreeNode*> q; q.push(root); while(!q.empty()){ res.push_back(q.front()->val); if(q.front()->left!=NULL) q.push(q.front()->left); if(q.front()->right!=NULL) q.push(q.front()->right); q.pop(); } return res; } };