当前位置: 首页 > 知识库问答 >
问题:

检查二叉树是否是和树

姜鸿
2023-03-14

QSTN:当它是叶节点时,为什么需要初始化ls=0或rs=0。考虑链接中给出的树,如果我们到达节点4,如果(node==NULL isLeaf(node))返回1;上面的代码将1(true)返回到调用它的函数,即节点10,类似地,右侧将true返回到节点10,因此我们现在可以进入下面的循环,因为如果(isSumTree(node->left)&&isSumTree(node->left)&&isSumTree(node->reght))节点是10我们计算左边和右边的数据,就像这里在else if条件中给出的那样,那么为什么如果(node->left==null)那么ls=0的条件是必要的(它不是已经像叶子节点一样被处理了吗)?因为return(4=0+0)将是false,整个循环将变成false?

int isLeaf(struct node *node)
{
  if(node == NULL)
    return 0;
  if(node->left == NULL && node->right == NULL)
    return 1;
    return 0;
}

int isSumTree(struct node* node)
{
  int ls; // for sum of nodes in left subtree
  int rs; // for sum of nodes in right subtree

  /* If node is NULL or it's a leaf node then
   return true */
   if(node == NULL || isLeaf(node))
    return 1;

   if( isSumTree(node->left) && isSumTree(node->right))
   {
     // Get the sum of nodes in left subtree
     if(node->left == NULL)
        ls = 0;
     else if(isLeaf(node->left))
        ls = node->left->data;
     else
        ls = 2*(node->left->data);

     // Get the sum of nodes in right subtree
     if(node->right == NULL)
        rs = 0;
     else if(isLeaf(node->right))
        rs = node->right->data;
     else
        rs = 2*(node->right->data);

     /* If root's data is equal to sum of nodes in left
       and right subtrees then return 1 else return 0*/
     return(node->data == ls + rs);
  }
    return 0;
}

共有1个答案

空成天
2023-03-14

我想你指的是台词

if(node->left == NULL)
    ls = 0;

if(node->right == NULL)
    rs = 0;

当左子项和右子项不存在时,该解决方案的作者将rs和ls初始化为0。之所以需要这个初始化,是因为之前没有分配给ls和RS。如果您没有这一步,您的ls和rs可能是垃圾值。

int ls = 0,rs = 0;
 类似资料:
  • 我实现了下面的C代码,以检查二叉树是否平衡,即左右子树的高度相差最多1。但是,我不确定它是否有效,或者以错误的方式重复检查子树。有人能引导我吗?

  • 我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?

  • 编写一个Lisp程序来检查一个二叉树是否是二叉搜索树。 我正在尝试编写一个二进制递归方法,但我是一个初学者,我不知道从这里去哪里。

  • 我知道如何检查给定的树是否是二叉树。但问题是,如果树包含重复的值,该怎么办。 如何检查可能包含重复值的树是否是二叉查找树重复值必须位于树/子树的右侧。

  • 我需要编写伪代码来检查有效的二叉树是否是搜索二叉树。 我创建了一个数组来保存树的顺序值。如果顺序值是降序的,这意味着它确实是BST。然而,我对INOVERAR方法中的递归有一些问题。 我需要更新数组的索引,以便按照值在树上的顺序将其提交给数组。 我不确定在递归过程中索引是否真的得到了正确更新。。到底是不是?如果你发现问题,能帮我解决吗?谢谢 伪代码 第一功能 IsBST(节点) 大小← 树化(节点

  • 我想写一个方法来确定一棵树是否至少有一对相同的子树,这些子树的值和结构都必须相同。 假设给你一棵树,如下所示: 这将返回,因为我们有一对根为的相同树。 我的想法是遍历每个节点,构建一个映射到