首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二叉树的摇摆

二叉树的摇摆
EN

Stack Overflow用户
提问于 2019-12-13 13:01:11
回答 1查看 52关注 0票数 1

Original Problem

问题如上所述,我的解决方案如下:返回BST树在一个方向上的摇摆量。Sway由“不平衡”的节点量表示- nullptr仅在一侧,左摆动的树返回其摆动的负数,任何右摆动都会偏移左边,反之亦然

代码语言:javascript
复制
int tree_sway(Node * node){
   if(!node){
      return 0;
   }

   int m = tree_sway(node->right) + 1;
   int n =  tree_sway(node->left) - 1;

   return m - n;
}

对于树摇摆问题,我发布的解决方案是否正确?如果不是,解决这个问题的唯一方法是创建一个辅助函数来跟踪递归步骤进行的左转和右转的次数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 13:24:35

您发布的代码不太正确。例如,在具有根和叶的树上,无论叶在哪一侧,结果都将始终为0。其中一种方法是:

代码语言:javascript
复制
int tree_swap(Node *node) {
    # base case of the recursion
    if (!node) { return 0; }

    # go down the left and right branches and add their scores
    int score = tree_swap(node->left) + tree_swap(node->right);

    # adjust the score for the missing children of the current node
    if (!node->left) { score++; }
    if (!node->right) { score--; }
    return score;
}

一般的想法是,当你递归时,你首先沿着树往下走,当你回到树上时,你计算丢失的左右分支,并将运行的计数传递到树上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59316383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档