Leetcode

其他树

2020-07-21  本文已影响0人  Catherin_gao

面试题 04.02. 最小高度树

1302. 层数最深叶子节点的和

方法一:递归

class Solution {
    int total=0;
    int maxdep=-1;
public:
    void dfs(TreeNode* root, int depth){
        if(!root) return;
        if(depth>maxdep){
            maxdep=depth;
            total=root->val;
        }
        else if(depth ==maxdep){
            total+= root->val;
        }
        dfs(root->left,depth+1);
        dfs(root->right,depth+1);

    }
    int deepestLeavesSum(TreeNode* root) {
       dfs(root, 0);
       return total;
    }
};

方法二:队列

class Solution {
    int total=0;
    int maxdep=-1;
public:
    int deepestLeavesSum(TreeNode* root) {
       if(!root) return 0;
       queue<TreeNode*> q;
       q.push(root);
       int depth=0;
       while(q.size()>0){
           int n=q.size();
           for(int i=0;i<n;i++){
               TreeNode* temp=q.front();
               q.pop();
               if(depth>maxdep){
                   maxdep=depth;
                   total=temp->val;
               }
               else if(depth==maxdep)
               {
                   total+=temp->val;
               }
               if(temp->left) q.push(temp->left);
               if(temp->right) q.push(temp->right); 
           }
           depth++;
       }
       return total;
    }
};

方法三:还是队列

class Solution {
public:
    Int deepestLeavesSum (TreeNode* root) {
       if(!root) return 0;
       queue<TreeNode*> q;
       q.push(root);
       int total=0;
       while(q.size()>0){
           int n=q.size();
           total=0;
           for(int i=0;i<n;i++){
               TreeNode* temp=q.front();
               q.pop();
               total+=temp->val;
               if(temp->left) q.push(temp->left);
               if(temp->right) q.push(temp->right); 
           }
       }
       return total;
    }
};

面试题 04.03. 特定深度节点链表

1315. 祖父节点值为偶数的节点和

方法一:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    int val=0;
public:
    void dfs(int grand,int parent ,TreeNode* node){
        if(!node) return;
        if(grand %2 ==0) val+=node->val;
        if(node->left) dfs(parent, node->val, node->left);
        if(node->right) dfs(parent, node->val, node->right);
    }
    int sumEvenGrandparent(TreeNode* root) {
      dfs(1,1,root);
      return val;
    }
};

方法二:队列

class Solution {
    int val=0;
public:
    int sumEvenGrandparent(TreeNode* root) {
        if(!root) return 0;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size()){
            int n = q.size();
            for(int i=0;i<n;i++){
                TreeNode* temp=q.front();
                q.pop();
                if(temp->val %2 ==0){
                    if(temp->left){
                        if(temp->left->left)
                            val+=temp->left->left->val;
                        if(temp->left->right)
                            val+=temp->left->right->val;
                    }
                    if(temp->right){
                        if(temp->right->left)
                            val+=temp->right->left->val;
                        if(temp->right->right)
                        val+=temp->right->right->val;
                    }
                }
                if(temp->left) q.push(temp->left);
                if(temp->right) q.push(temp->right);
            }
        }
        return val;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读