Redian新闻
>
一个题:给定一个节点,找right neighbor
avatar
一个题:给定一个节点,找right neighbor# JobHunting - 待字闺中
s*u
1
不是right sibling,而是right neighbor。
就是如果做BFS,与给定节点同一层的后面一个。给parent link,但没有root node,
也不能强行找到root之后然后再做BFS(本身那么做就非常低效)
======================================
没想出来,看了别人的思路写了一下,感觉写的非常冗余,不知道能不能优化一下:
TreeNode *findByLvl( TreeNode *root, int lvl ){
if( root == NULL )
return NULL;

if( lvl == 0 )
return root;

TreeNode *left = findByLvl(root->left,lvl+1);
if( left ) return left;
else return findByLvl(root->right,lvl+1);
}
TreeNode* rNeighbor( TreeNode *given ){

TreeNode *parent = given->parent;
int level = -1;

while(parent){

while( parent && parent->left != given ){
given = parent;
parent = given->parent;
level--;
}

if( parent == NULL )
return NULL;

TreeNode *local = findByLvl( parent->right, level + 1);

if(local)
return local;
else{
given = parent;
parent = given->parent;
level--;
}
}

return NULL;

}
avatar
l*n
2
怎么冗余啊,就是不停以不同的ancestor来找同样lvl的节点,已经是人脑识别模式了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。