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;
}
距离是k的二叉树节点(C语言)
最新推荐文章于 2025-07-28 14:53:07 发布