代码随想录第十五天,LeetCode层序训练十道题102,107,119,637,429,515,116,117,104,111;226翻转二叉树;101对称二叉树

题目:102
/**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    
  • };
    /
    class Solution {
    public:
    vector<vector> levelOrder(TreeNode
    root) {
    queue<TreeNode*>que;
    if(root!=NULL) que.push(root);
    vector<vector> result;
    while(!que.empty()){
    int size=que.size();
    vector vec;
    for(int i=0;i<size;++i){
    TreeNode*cue=que.front();
    que.pop();
    vec.push_back(cue->val);
    if(cue->left) que.push(cue->left);
    if(cue->right) que.push(cue->right);

         }
         result.push_back(vec);
     }
     return result;
    

    }
    };
    题目:107
    /**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
    
  • right(right) {}

  • };
    /
    class Solution {
    public:
    vector<vector> levelOrderBottom(TreeNode
    root) {
    queue<TreeNode*> que;
    if (root != NULL) que.push(root);
    vector<vector> result;
    while (!que.empty()) {
    int size = que.size();
    vector vec;
    for (int i = 0; i < size; i++) {
    TreeNode* node = que.front();
    que.pop();
    vec.push_back(node->val);
    if (node->left) que.push(node->left);
    if (node->right) que.push(node->right);
    }
    result.push_back(vec);
    }
    reverse(result.begin(), result.end());
    return result;
    }
    };

题目199
vector rightSideView(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector result;
while (!que.empty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
if (i == (size - 1)) result.push_back(node->val); // 将每一层的最后元素放入result数组中
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return result;
}
};
题目:637
**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
    
  • right(right) {}

  • };
    /
    class Solution {
    public:
    vector averageOfLevels(TreeNode
    root) {
    queue<TreeNode*> que;
    if (root != NULL)
    que.push(root);
    vector result;
    while (!que.empty()) {
    int size = que.size();
    double sum=0;
    for (int i = 0; i < size; i++) {
    TreeNode* node = que.front();
    que.pop();
    sum += node->val;

             if (node->left)
                 que.push(node->left);
             if (node->right)
                 que.push(node->right);
         }
         result.push_back(sum / size);
     }
    
     return result;
    

    }
    };
    题目:429
    /*
    // Definition for a Node.
    class Node {
    public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
    val = _val;
    }

    Node(int _val, vector<Node*> _children) {
    val = _val;
    children = _children;
    }
    };
    */

class Solution {
public:
vector<vector> levelOrder(Node* root) {
queue<Node*>que;
if(root!=NULL) que.push(root);
vector<vector> result;
while(!que.empty()){
int size=que.size();
vector vec;
for(int i=0;i<size;++i){
Node *node=que.front();
que.pop();
vec.push_back(node->val);
for(int i=0;ichildren.size();++i){
if(node->children[i]) que.push(node->children[i]);
}

        }
         result.push_back(vec);
    }
    return result;
    
}

};
题目:515
class Solution {
public:
vector largestValues(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector result;
while (!que.empty()) {
int size = que.size();
int maxValue = INT_MIN; // 取每一层的最大值
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
maxValue = node->val > maxValue ? node->val : maxValue;
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
result.push_back(maxValue); // 把最大值放进数组
}
return result;
}
};
题目:116
class Solution {
public:
Node* connect(Node* root) {
queue<Node*> que;
if (root != NULL) que.push(root);
while (!que.empty()) {
int size = que.size();
// vector vec;
Node* nodePre;
Node* node;
for (int i = 0; i < size; i++) {
if (i == 0) {
nodePre = que.front(); // 取出一层的头结点
que.pop();
node = nodePre;
} else {
node = que.front();
que.pop();
nodePre->next = node; // 本层前一个节点next指向本节点
nodePre = nodePre->next;
}
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
nodePre->next = NULL; // 本层最后一个节点指向NULL
}
return root;

}

};
题目:117
class Solution {
public:
Node* connect(Node* root) {
queue<Node*> que;
if (root != NULL) que.push(root);
while (!que.empty()) {
int size = que.size();
// vector vec;
Node* nodePre;
Node* node;
for (int i = 0; i < size; i++) {
if (i == 0) {
nodePre = que.front(); // 取出一层的头结点
que.pop();
node = nodePre;
} else {
node = que.front();
que.pop();
nodePre->next = node; // 本层前一个节点next指向本节点
nodePre = nodePre->next;
}
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
nodePre->next = NULL; // 本层最后一个节点指向NULL
}
return root;

}

};
题目104
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == NULL) return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()) {
int size = que.size();
depth++;
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
}
}
return depth;
}
};
题目111
class Solution {
public:
int minDepth(TreeNode* root) {
if (root == NULL) return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()) {
int size = que.size();
depth++; // 记录最小深度
for (int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
if (!node->left && !node->right) { // 当左右孩子都为空的时候,说明是最低点的一层了,退出
return depth;
}
}
}
return depth;
}
};
题目:226
/**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    
  • };
    /
    class Solution {
    public:
    TreeNode
    invertTree(TreeNode* root) {
    if(root==NULL) return root;
    swap(root->left,root->right);
    invertTree(root->left);
    invertTree(root->right);
    return root;
    }
    };
    题目101
    /**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    
  • };
    /
    class Solution {
    public:
    bool compare(TreeNode
    left,TreeNoderight){
    if(leftNULL&&right!=NULL){
    return false;
    }else if(left!=NULL&&right
    NULL){
    return false;
    }else if(leftNULL&&rightNULL){
    return true;
    }else if(left->val!=right->val){
    return false;
    }else{
    bool outside=compare(left->left,right->right);
    bool inside=compare(left->right,right->left);
    return (outside&&inside);
    }
    }
    bool isSymmetric(TreeNode
    root) {
    if(root==NULL) return true;
    return compare(root->left,root->right);

    }
    };

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值