C++ 分别计算二叉树左侧和右侧的子级

C++ 分别计算二叉树左侧和右侧的子级,c++,data-structures,binary-tree,C++,Data Structures,Binary Tree,我有一段代码,它只计算二叉树中正确子树的数量 int count(Arbin<T> a){ if(a.isEmpty()) return 0; int num_l=0, num_r=0; if(!a.leftChild.isEmpty()) num_l = count(a.leftChild()); if(!a.rightChild.isEmpty()) num_r = count(a.rightChild())+1; return num_l+num_r;

我有一段代码,它只计算二叉树中正确子树的数量

int count(Arbin<T> a){

if(a.isEmpty()) return 0;

int num_l=0, num_r=0;
if(!a.leftChild.isEmpty()) 
    num_l = count(a.leftChild());
if(!a.rightChild.isEmpty()) 
    num_r = count(a.rightChild())+1;

return num_l+num_r;}
int计数(Arbin a){
如果(a.isEmpty())返回0;
int num_l=0,num_r=0;
如果(!a.leftChild.isEmpty())
num_l=计数(a.leftChild());
如果(!a.rightChild.isEmpty())
num_r=计数(a.rightChild())+1;
返回num\u l+num\u r;}
我如何修改它,以便分别获得右侧子项和左侧子项的数量

Arbin
class仅允许我执行此操作(我无法修改):

  • rightChild()
    :返回右子节点的节点
  • leftChild()
    :返回左子节点的节点
  • isEmpty()
    :返回节点是否为空

如果可以修改
count()
,请执行以下操作:

void count(Arbin<T> a, int& l, int& r){

if(a.isEmpty()) return ;

if(!a.leftChild.isEmpty()) 
    count(a.leftChild(), l+1, r);
if(!a.rightChild.isEmpty()) 
    count(a.rightChild(), l, r+1);

}

您将“单独”获取它们。你数到左边,然后再数到右边。如前所述,你总是会得到0。。。因为0+0等于0。在纸上画一棵二叉树,用铅笔标记你想要计数的节点,实现计数应该很简单。顺便说一下,90%的代码已经完成了。是的,但是我想计算每个子树的代码,直到它到达父树。问题是,如果使用全局变量,则这些值仅对整个树有效,而对每个特定子树无效
count(a.rightChild()+1)
->
count(a.rightChild())+1
int l = 0, r = 0;
count(tree, l, r);
// here you've left child count in `l` and right count in `r`