C++ 这两个程序有什么不同
我在做一个二叉树程序,这个程序运行正常C++ 这两个程序有什么不同,c++,pointers,reference,binary-tree,C++,Pointers,Reference,Binary Tree,我在做一个二叉树程序,这个程序运行正常 #include <iostream> using namespace std; struct node{ int data; node *left; node *right; }; void insert( node **rootnode , int value) { node* newnode = *rootnode; if ( newnode == NULL ) { n
#include <iostream>
using namespace std;
struct node{
int data;
node *left;
node *right;
};
void insert( node **rootnode , int value) {
node* newnode = *rootnode;
if ( newnode == NULL ) {
newnode = new node;
newnode->left = NULL;
newnode->right = NULL;
newnode->data = value;
*rootnode = newnode; // this was missing!
}
else if ( value < newnode->data ){
insert( &newnode->left , value );
}
else if ( value > newnode->data ){
insert ( &newnode->right , value );
}
}
void inorder ( node *root ){
if ( root == NULL ){
return;
}
else{
inorder( root->left );
cout << root->data << endl;
inorder( root->right );
}
}
int main(){
node* root = NULL;
insert ( &root , 4);
insert ( &root , 5);
insert ( &root , 2 );
insert( &root , 10 );
insert( &root , 1 );
//cout << root->data << endl;
inorder( root );
}
#包括
使用名称空间std;
结构节点{
int数据;
节点*左;
节点*右;
};
无效插入(节点**根节点,int值){
node*newnode=*rootnode;
if(newnode==NULL){
newnode=新节点;
newnode->left=NULL;
newnode->right=NULL;
新建节点->数据=值;
*rootnode=newnode;//缺少此文件!
}
else if(值data){
插入(&newnode->左,值);
}
else if(值>新节点->数据){
插入(&newnode->右侧,值);
}
}
无效索引(节点*根){
if(root==NULL){
返回;
}
否则{
顺序(根->左);
cout(数据权);
}
}
int main(){
node*root=NULL;
插入(&root,4);
插入(&根,5);
插入(&根,2);
插入(&根,10);
插入(&根,1);
//cout data left=NULL;
newnode->right=NULL;
新建节点->数据=值;
rootnode=newnode;//缺少此文件!
}
else if(值data){
插入(新节点->左,值);
}
else if(值>新节点->数据){
插入(新节点->右侧,值);
}
}
无效索引(节点*根){
if(root==NULL){
返回;
}
否则{
顺序(根->左);
cout(数据权);
}
}
int main(){
node*root=NULL;
插入(根,4);
插入(根,5);
插入(根,2);
插入(根,10);
插入(根,1);
//cout data函数参数是函数的局部变量。它们获取相应参数值的副本
您可以想象以下函数声明
void insert( node *rootnode , int value);
以及它的号召
insert ( root , 4);
下面的方法
void insert( /*node *rootnode , int value*/)
{
node *rootnode = root;
int value = 4;
//...
void insert( node * &rootnode , int value) ;
退出函数后,这些局部变量将被销毁。varibaleroot
的原始值不会更改,因为函数处理的是root
的副本
因此,如果您想将任何传递给函数中的函数的对象,都需要通过C意义或C++意义上的引用传递它。
在C中,你传递一个指向该对象的指针。在C++中,你可以使用相同的方法或者声明CalStangin参数作为参考。
因此,在C中,函数声明可以如下所示
void insert( node **rootnode , int value) ;
在C++中,它可以看起来像上面的方法或者下面的方式< /P>
void insert( /*node *rootnode , int value*/)
{
node *rootnode = root;
int value = 4;
//...
void insert( node * &rootnode , int value) ;
函数参数是函数的局部变量。它们获取相应参数值的副本
您可以想象以下函数声明
void insert( node *rootnode , int value);
以及它的号召
insert ( root , 4);
下面的方法
void insert( /*node *rootnode , int value*/)
{
node *rootnode = root;
int value = 4;
//...
void insert( node * &rootnode , int value) ;
退出函数后,这些局部变量将被销毁。varibaleroot
的原始值不会更改,因为函数处理的是root
的副本
因此,如果您想将任何传递给函数中的函数的对象,都需要通过C意义或C++意义上的引用传递它。
在C中,你传递一个指向该对象的指针。在C++中,你可以使用相同的方法或者声明CalStangin参数作为参考。
因此,在C中,函数声明可以如下所示
void insert( node **rootnode , int value) ;
在C++中,它可以看起来像上面的方法或者下面的方式< /P>
void insert( /*node *rootnode , int value*/)
{
node *rootnode = root;
int value = 4;
//...
void insert( node * &rootnode , int value) ;
听起来你可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:听起来你可能需要学习如何使用调试器来完成代码通过一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读: