- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有二叉搜索树,我想得到它的元素的后继我看到我的代码很好,但我不知道出了什么问题 115 是运行时错误,5 是 5,应该是 6
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
Node *root;
Node *left;
Node *right;
};
typedef Node *ptr;
ptr search(ptr tree,int key)
{
if(tree==NULL)return tree;
if(tree->data==key)
return tree;
else if(tree->data>key)
search(tree->right,key);
else search(tree->left,key);
}
ptr most_left(ptr tree)
{
ptr result=tree;
if(tree==NULL)return NULL;
while(result->left!=NULL)
result=result->left;
return result;
}
ptr most_right(ptr tree)
{
ptr result=tree;
if(tree==NULL)return NULL;
while(result->right!=NULL)
result=result->right;
return result;
}
ptr min_element(ptr tree)
{
ptr result=tree;
if(tree==NULL)return NULL;
while(result->left!=NULL)
result=result->left;
return result;
}
ptr max_element(ptr tree)
{
ptr result=tree;
if(tree==NULL)return NULL;
while(result->right!=NULL)
result=result->right;
return result;
}
ptr temp=NULL;
ptr insert_element(ptr &tree,int key)
{
if(tree==NULL)
{
tree=new Node();
tree->data=key;
tree->root=temp;
return tree;
}
else if(tree->data>=key)
{
temp=tree;
insert_element(tree->left,key);
}
else
{
temp=tree;
insert_element(tree->right,key);
}
}
void in_order(ptr tree)
{
if(tree == NULL) return;
in_order(tree->left);
cout<<tree->data<<" ";
in_order(tree->right);
}
void pre_order(ptr tree)
{
if(tree == NULL) return;
cout<<tree->data<<" ";
pre_order(tree->left);
pre_order(tree->right);
}
void post_order(ptr tree)
{
if(tree == NULL) return;
post_order(tree->left);
post_order(tree->right);
cout<<tree->data<<" ";
}
ptr succesor(ptr node)
{
if(node->right != NULL) return min_element(node->right);
ptr y = node->root;
while(y != NULL && node == y->right ) {
node = y;
y = y->root;
}
return y;
}
int main()
{
ptr tree = NULL;
insert_element(tree,7);
insert_element(tree,5);
insert_element(tree,55);
insert_element(tree,6);
insert_element(tree,15);
insert_element(tree,60);
insert_element(tree,10);
insert_element(tree,115);
ptr inserted = insert_element(tree,5);
insert_element(tree,6);
insert_element(tree,12);
cout<<"succesor "<<succesor(inserted)->data;
cout<<"\nData Inserted \n"<<"In order : ";
in_order(tree);
cout<<endl;
cout<<"Pre order : ";
pre_order(tree);
cout<<endl;
cout<<"Post order : ";
post_order(tree);
cout<<endl;
cout<<"Minimum : "<<min_element(tree)->data<<endl;
cout<<"Maximum : "<<max_element(tree)->data<<endl;
return 0;
}
最佳答案
“5应该是6”
不,程序绝对正确。
在 insert_element
函数中,您检查 tree->data >= key
(注意 >=),所以如果已经有一个元素与要插入的key相同的数据,新的key会被插入到左子树中。这就是为什么最后插入的 5 的后继是前一个插入的 5。如果将 >=
替换为 >
,第二个 5 将被插入到右子树中,因此它的继任者如预期的那样是 6。
115 的后继者运行时错误
当然,115没有后继者,因为这是最大的值(value)。因此,后继函数返回一个 NULL 指针,如果取消引用,将导致未定义的行为。
顺便说一句,程序有更多未定义的行为。函数 search
和 insert_element
可能会在函数末尾流出而不返回值。标准说:
Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function. (6.6.3)
在这种情况下,您很幸运,因为在大多数实现中,存储返回值的位置保留其值来自递归调用的返回语句,但是,当然,这应该是固定的。
关于c++ - 获取后继二进制搜索树 C++ 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37873303/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!