栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

距离是k的二叉树节点(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

距离是k的二叉树节点(C语言)

int a[1000] = {0};
int i = 0;
void PrevOrder1(struct TreeNode* root,int k)
{
    if(root==NULL)
        return;
    if(k==1)
    {
        a[i++] = root->val;
        return;
    }
    PrevOrder1(root->left, k-1);
    PrevOrder1(root->right, k-1);
}
int PrevOrder2(struct TreeNode* root, int target,int k)
{
    if(root==NULL)
        return -1;
    if(root->val==target)
        return k;
    int ret1 = PrevOrder2(root->left, target, k-1);
    if(ret1!=-1)
        return ret1;
    int ret2 = PrevOrder2(root->right, target,  k-1);
    return ret2;
}
void PrevOrder3(struct TreeNode* root, int k)
{
    if(root==NULL)
        return ;
    if(k==0)
    {
        a[i++] = root->val;
        return ;
    }
    PrevOrder3(root->left,k-1);
    PrevOrder3(root->right,k-1);
}
void _distanceKnodes(struct TreeNode* root, int target,int k)
{
    //空节点返回
    if(root==NULL)
        return ;
    //正好找到了就找从他往下的第k个节点
    if(root->val==target)
    {
        PrevOrder3(root->left, k-1);
        PrevOrder3(root->right, k-1);
    }
    //不是target就从这个位置找,找到了返回还要往另外的方向走几步
    else
    {
        int ret1 = PrevOrder2(root->left, target,k-1);
        if(ret1!=-1)
        {
            //全找完了就是他了
            if(ret1==0)
                a[i++] = root->val;
            //走另一边剩下的距离
            else
                PrevOrder3(root->right,ret1-1);
        }
        int ret2 = PrevOrder2(root->right, target,  k-1);
        if(ret2!=-1)
        {
            if(ret2==0)
                a[i++] = root->val;
            else
                PrevOrder3(root->left,ret2-1);
        }
    }
    _distanceKnodes(root->left,target,k);
    _distanceKnodes(root->right,target,k);
}
int* distanceKnodes(struct TreeNode* root, int target, int k, int* returnSize ) {
    // write code here
    //遍历这棵树,分成target节点和一般的非target节点
     _distanceKnodes(root,target,k);
    *returnSize = i;
    return a;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号