首页 > 其他分享 >DAY13 二叉树part01

DAY13 二叉树part01

时间:2024-07-29 19:06:59浏览次数:12  
标签:node right TreeNode part01 int que 二叉树 DAY13 left

 

今日任务 

二叉树的递归遍历(前中后)

二叉树的迭代遍历(前中后)

二叉树的统一迭代遍历

二叉树的层序遍历(共十道题目)

完成情况

递归已掌握,代码略

迭代前中手写一编,后和统一未学习

层序遍历题目如下

102.二叉树的层序遍历

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     vector<vector<int>> levelOrder(TreeNode* root) {
15         queue<TreeNode*>que;
16         vector<vector<int>> result;
17         if(root!=NULL) que.push(root);
18         while(!que.empty())
19         {
20             int size=que.size();
21             vector<int> res;//写到for循环外边
22             for(int i=0;i<size;i++)
23             {
24                 
25                 TreeNode* cur=que.front();
26                 que.pop();
27                 res.push_back(cur->val);
28                 if(cur->left) que.push(cur->left);
29                 if(cur->right) que.push(cur->right);
30 
31             }
32             result.push_back(res);
33         }
        reverse(result.begin(),result.end());//107.层序遍历II只要加上反转 34 return result; 35 } 36 };

199.二叉树的右视图

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     vector<int> rightSideView(TreeNode* root) {
15         queue<TreeNode*> que;
16         if (root != NULL) que.push(root);
17         vector<int> result;
18         while (!que.empty()) {
19             int size = que.size();
20             for (int i = 0; i < size; i++) {
21                 TreeNode* node = que.front();
22                 que.pop();
23                 if (i == (size - 1)) result.push_back(node->val); // 将每一层的最后元素放入result数组中
24                 if (node->left) que.push(node->left);
25                 if (node->right) que.push(node->right);
26             }
27         }
28         return result;
29     
30     }
31 };

637.二叉树的层平均值

注意精度要求

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     vector<double> averageOfLevels(TreeNode* root) {
15         queue<TreeNode*> que;
16         if (root != NULL) que.push(root);
17         vector<double> result;
18         while (!que.empty()) {
19             int size = que.size();
20             vector<double> vec;
21             for (int i = 0; i < size; i++) {
22                 TreeNode* node = que.front();
23                 que.pop();
24                 vec.push_back(node->val);
25                 if (node->left) que.push(node->left);
26                 if (node->right) que.push(node->right);
27             }
28             double sum=0;
29             for(int i=0;i<vec.size();i++)
30                 sum+=vec[i];
31             result.push_back(sum/vec.size());
32         }
33         return result;
34     }
35 };

429.N叉树的层序遍历

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4 public:
 5     int val;
 6     vector<Node*> children;
 7 
 8     Node() {}
 9 
10     Node(int _val) {
11         val = _val;
12     }
13 
14     Node(int _val, vector<Node*> _children) {
15         val = _val;
16         children = _children;
17     }
18 };
19 */
20 
21 class Solution {
22 public:
23     vector<vector<int>> levelOrder(Node* root) {
24         queue<Node*>que;
25          vector<vector<int>> result;
26          if(root!=NULL) que.push(root);
27          while(!que.empty())
28          {
29              int size=que.size();
30              vector<int> res;//写到for循环外边
31              for(int i=0;i<size;i++)
32              {
33              
34                 Node* cur=que.front();
35                  que.pop();
36                  res.push_back(cur->val);
37                  if(!cur->children.empty())
38                  {
39                     vector<Node*> tmp=cur->children;
40                     for(int i=0;i<tmp.size();i++)
41                     {
42                         que.push(tmp[i]);
43                     }
44                  }
45             }
46             result.push_back(res);
47        }
48         return result;     
49     }
50 };

 111.二叉树的最小深度

 1 class Solution {
 2 public:
 3     int minDepth(TreeNode* root) {
 4         if (root == NULL) return 0;
 5         int depth = 0;
 6         queue<TreeNode*> que;
 7         que.push(root);
 8         while(!que.empty()) {
 9             int size = que.size();
10             depth++; // 记录最小深度
11             for (int i = 0; i < size; i++) {
12                 TreeNode* node = que.front();
13                 que.pop();
14                 if (node->left) que.push(node->left);
15                 if (node->right) que.push(node->right);
16                 if (!node->left && !node->right) { // 当左右孩子都为空的时候,说明是最低点的一层了,退出
17                     return depth;
18                 }
19             }
20         }
21         return depth;
22     }
23 };

 

标签:node,right,TreeNode,part01,int,que,二叉树,DAY13,left
From: https://www.cnblogs.com/xzdmzrc221202/p/18330815

相关文章

  • day22-back tracking-part01-7.24
    tasksfortoday:1.回溯理论基础2.77.组合3.216.组合总和III4.17.电话号码的字母组合-------------------------------------------------------------------1.回溯理论基础-什么是回溯:在二叉树系列中,我们已经不止一次,提到了回溯,回溯是递归的副产品,只要有递归就......
  • day27-greedy-part01-7.29
    tasksfortoday:1.理论基础2.455.分发饼干3.376.摆动序列4.53.最大子序和------------------------------------------------------------------1.理论基础(1)贪心的本质是选择每一阶段的局部最优,从而达到全局最优。经常与贪心算法放在一起进行比较的就是动态规划,以下是......
  • 代码随想录day13 || 树定义以及遍历
    二叉树定义和种类二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为“左子节点”和“右子节点”。二叉树在计算机科学中有广泛的应用,比如表达式解析、排序算法、搜索算法等。二叉树的定义一个二叉树由一组节点组成,其中每个节点至多有两个子节点,分别称为左子节点和......
  • LeetCode LCR 124.推理二叉树(哈希表 + 建树)
    某二叉树的先序遍历结果记录于整数数组 preorder,它的中序遍历结果记录于整数数组 inorder。请根据 preorder 和 inorder 的提示构造出这棵二叉树并返回其根节点。注意:preorder 和 inorder 中均不含重复数字。示例1:输入:preorder=[3,9,20,15,7],inorder=......
  • Day13 二叉树Part1 遍历
    递归遍历要理解递归,可以借助二叉树的递归遍历来理解。下面是二叉树递归遍历,以这个为例,来阐述下递归的原理。#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=......
  • LeetCode654. 最大二叉树
    题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/题目叙述给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大......
  • 数据结构-二叉树、堆、图
    一、线索二叉树规律:在有n个节点的链式二叉树中必定存在n+1个空指针链式二叉树中有很多的空指针,可以让这些空指针指向前一个节点\后一个节点,从而在有序遍历(中序遍历)二叉树时,不需要使用递归而通过循环即可以完成,并且效率要比递归快得多一定是搜索二叉树线索二叉树的结构typ......
  • LeetCode222.完全二叉树的节点个数
    题目链接:https://leetcode.cn/problems/count-complete-tree-nodes/description/题目叙述给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该......
  • 数据结构——链式二叉树(C语言版)
    链式二叉树的结构⽤链表来表⽰⼀棵⼆叉树,即⽤链来指⽰元素的逻辑关系。通常的⽅法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别⽤来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址。                                ......
  • 代码随想录算法训练营第22天-leetcode-回溯算法part01:
    #回溯算法理论基础能解决的问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等第77题.组合力扣题目链接(op......