今天写二叉树秀逗了~~~

今天想起写写二叉树,发现自己好久没有看这个然后秀逗了,这里涉及到的是值传递和地址传递的问题

 

 

#include <iostream>
using namespace std;
#include <stdlib.h>


typedef struct BTNode{
int data;
BTNode *pLChild,*pRChild;
}BTNode;

 


//创建2叉树
void CreateBTTree(BTNode*pTreeNode)
{
int input;
cout<<"等待输入"<<endl;
scanf("%d",&input);
if(input==0)
pTreeNode=NULL;
else
{
pTreeNode=new BTNode;
pTreeNode->data=input;
cout<<pTreeNode->data<<endl;
CreateBTTree(pTreeNode->pLChild);
CreateBTTree(pTreeNode->pRChild);

}


}

//先序遍历二叉树
void XianXuBianLi(BTNode*pTreeNode)
{
	if(pTreeNode==NULL)cout<<"0"<<endl;
	else
	{
		cout<<pTreeNode->data<<endl;
		XianXuBianLi(pTreeNode->pLChild);
		XianXuBianLi(pTreeNode->pRChild);

	}

}


int main()
{
   BTNode*pTree=NULL;

   CreateBTTree(pTree);
  XianXuBianLi(pTree);




	return 0;
}

  

然后输入没有问题,看遍历的时候老是读内存出错,难道我new 的BTNode没有用

于是想了想,这个问题和值传递和地址传递是不是很像呢,我们来写一个类比一下

 

void Create(int a)
{
    a=5;

}


int main()
{
    int b=7;
    Create(b);
    cout<<"a's value is "<<b<<endl;
}

这里的运行结果是a为7 值传递当然不改变他的值啦

现在我们改一下

void Create(int &a)
{
    a=5;

}


int main()
{
    int b=7;
    Create(b);
    cout<<"a's value is "<<b<<endl;
}

好了,现在他的值可以改变了

 

同样如此在上面的二叉树创建的过程也是一样,传了一个指针进去了,这里应该传指针的引用,因为需要对指针的值进行修改

所以应该改为这样

//创建2叉树
void CreateBTTree(BTNode*&pTreeNode)
{
    int input;
    cout<<"等待输入"<<endl;
    scanf("%d",&input);
    if(input==0)
    pTreeNode=NULL;
    else
    {
        pTreeNode=new BTNode;
        pTreeNode->data=input;
        cout<<pTreeNode->data<<endl;
        CreateBTTree(pTreeNode->pLChild);
        CreateBTTree(pTreeNode->pRChild);

    }


}

这样就可以了,好久不写代码,很多东西理论和实践还是要结合在一起呀~~~

 

 

 

posted on 2013-11-26 14:43  AAAAAApple  阅读(246)  评论(0编辑  收藏  举报

导航