ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

剑指Offer | 水水怪第day06_搜索与回溯算法(简单)

2021-10-02 22:31:33  阅读:166  来源: 互联网

标签:node cur Offer day06 back 水怪 二叉树 push dq


剑指 Offer 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

提示:

  1. 节点总数 <= 1000

方法一:copy

class Solution {
public:
    vector<int> levelOrder(TreeNode* root) 
    {
        vector<int> rest;
        queue<TreeNode*> q;//使用队列先进先出的特性,实现二叉树的广度优先搜索BFS
        if(!root) return rest;
        q.push(root);//根节点入队

        while(!q.empty())
        {
             TreeNode* node =q.front();//暂存队头元素
             q.pop();//队头元素出队
             rest.push_back(node->val);
             //若当前结点的左右子节点不为空,则先左后右将其子节点入队
             if(node->left) q.push(node->left);
             if(node->right) q.push(node->right);
        }

        return rest;

    }
};

剑指 Offer 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

提示:

  1. 节点总数 <= 1000

方法一:copy

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
      // 定义一个队列用来接收每一层
      queue<TreeNode*> q;
      // 结果数组
      vector<vector<int>> resVector;
      if (root == NULL) return resVector;
      q.push(root);
      while (!q.empty()) {
          vector<int> tempVector;
          for (int i = q.size(); i > 0; i--) { //这里的循环只会将队列q最初的长度值赋给i,所以后面入队的元素不影响
              TreeNode* node = q.front();
              q.pop();
              tempVector.push_back(node->val);
              if (node->left != NULL) q.push(node->left);
              if (node->right != NULL) q.push(node->right);
          }
          resVector.push_back(tempVector);
      }
      return resVector;

    }
};

剑指 Offer 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

提示:

  1. 节点总数 <= 1000

方法一:copy

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        if (root == nullptr) return res;
        deque<TreeNode*> dq;
        dq.push_back(root);
        int layer = 0;
        vector<vector<int>> ans;
        while (!dq.empty()) {
            auto size = dq.size();
            vector<int> res;
            while (size--) {
                TreeNode* cur;
                if (layer & 1) {
                    cur = dq.back(); dq.pop_back();
                    res.push_back(cur -> val);   
                    if (cur -> right) dq.push_front(cur -> right);
                    if (cur -> left) dq.push_front(cur -> left);          
                } else {
                    cur = dq.front(); dq.pop_front();
                    res.push_back(cur -> val);
                    if (cur -> left) dq.push_back(cur -> left);
                    if (cur -> right) dq.push_back(cur -> right);
                }
                
            }
            ++layer;
            ans.push_back(res);
        }
        return ans;
    }
};

标签:node,cur,Offer,day06,back,水怪,二叉树,push,dq
来源: https://www.cnblogs.com/july-iet/p/15362901.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有