zoukankan      html  css  js  c++  java
  • 今天写二叉树秀逗了~~~

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

    #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);
    
        }
    
    
    }

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

  • 相关阅读:
    三种数据解析方式
    requests模块相关用法
    urllib模块基本用法
    django复习题
    scrapy框架编写向redis数据库中存储数据的相关代码时报错解决办法
    并发编程练习题
    网络编程 socket 开发练习题
    面向对象编程设计练习题(2)
    pytest-fixtured
    Python 删除某一目录下的所有文件或文件夹
  • 原文地址:https://www.cnblogs.com/OneDream/p/3443312.html
Copyright © 2011-2022 走看看