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


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

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

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

  • 相关阅读:
    broncho a1 hack指南-准备硬件
    嵌入式GUI ftk0.1发布
    ASP.net页面防刷新
    C#反射入门教程(转)
    万物生萨顶顶
    [转载内容]C# win程序中主窗体菜单的权限控制
    VB.net技巧更新(一)
    XML与dataset里相互读取操作
    操作EXCEL代码(c#完全版)
    [转载内容]动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )
  • 原文地址:https://www.cnblogs.com/OneDream/p/3443312.html
Copyright © 2020-2023  润新知