zoukankan      html  css  js  c++  java
  • 18.两节点的路径长度

    /**
     * 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 {
        int n,m,h[1111],ne[2222],p[2222],d[1111][1111];
        bool b[1111];//标记是否叶子结点
        void add(int x,int y)
        {
            p[++m]=y;
            ne[m]=h[x];
            h[x]=m;
            p[++m]=x;
            ne[m]=h[y];
            h[y]=m;
        }
        int dfs(TreeNode* root)
        {
            int r=n++,c;
            b[r]=1;
            if(root->left!=nullptr)
            {
                c=dfs(root->left);
                add(r,c);
                b[r]=0;
            }
            if(root->right!=nullptr)
            {
                c=dfs(root->right);
                add(r,c);
                b[r]=0;
            }
            return r;
        }
        void work(int x,int r,int f)
        {
            for(int i=h[x];i;i=ne[i])if(p[i]!=f)
            {
                d[r][p[i]]=d[r][x]+1;
                work(p[i],r,x);
            }
        }
    public:
        int countPairs(TreeNode* root, int distance) {
            n=m=0;
            memset(h,0,sizeof(h));
            memset(d,0,sizeof(d));
            memset(b,0,sizeof(b));
            dfs(root);
            int i,j,ans;
            for(i=0;i<n;i++)work(i,i,i);
            for(i=0;i<n;i++)if(b[i])for(j=0;j<i;j++)if(b[j]&&d[i][j]<=distance)ans++;
            return ans;
        }
    };
  • 相关阅读:
    C#中值类型和引用类型
    C#XML
    矩阵操作2
    scala安装
    Linux拷贝U盘文件(命令行)
    通过电脑,模拟点击手机屏幕 /手机自动点击,刷金币?
    python类
    矩阵操作
    数据预处理函数
    train_test_split数据切分
  • 原文地址:https://www.cnblogs.com/apo2019/p/13380453.html
Copyright © 2011-2022 走看看