关于二叉树的插入,传参的小问题

问题描述

关于二叉树的插入,传参的小问题
 #include <iostream>
using namespace std;
// 有序二叉树(二叉搜索树)
class Tree {
public:
    Tree (void) : m_root (NULL), m_size (0) {}

    void insert (int data) {
        //Node * a = new Node (data);
        insert (new Node (data), m_root);
        ++m_size;
    }
    void travel (void) {
        travel (m_root);
        cout << endl;
    }

private:
    // 节点
    class Node {
    public:
        Node (int data) : m_data (data),
            m_left (NULL), m_right (NULL) {}
        int m_data; // 数据
        Node* m_left; // 左树
        Node* m_right; // 右树
    };
    void insert (Node* node, Node*& tree) {
        if (! tree){
            tree = node;
        }
        else if (node) {
            if (node->m_data < tree->m_data)
                insert (node, tree->m_left);
            else
                insert (node, tree->m_right);

        }
    }

    void travel (Node* tree) {
        if (tree) {
            travel (tree->m_left);
            cout << tree->m_data << ' ';
            travel (tree->m_right);
        }
    }

    Node* m_root; // 树根
    size_t m_size; // 大小
};

int main (void) {
    Tree tree;
    tree.insert (50);
    tree.insert (60);
    tree.insert (70);
    tree.travel();
    return 0;
}

为什么insert (Node* node, Node*& tree)这句去掉引用,数据就显示不出来了

解决方案

 // app1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream>
using namespace std;
// 有序二叉树(二叉搜索树)
class Tree {
public:
    Tree (void) : m_root (NULL), m_size (0) {}

    void insert (int data) {
        Node * a = new Node (data);
        insert (&a, &m_root);
        ++m_size;
    }
    void travel (void) {
        travel (m_root);
        cout << endl;
    }

private:
    // 节点
    class Node {
    public:
        Node (int data) : m_data (data),
            m_left (NULL), m_right (NULL) {}
        int m_data; // 数据
        Node* m_left; // 左树
        Node* m_right; // 右树
    };
    void insert (Node** node, Node** tree) {
        if (!(*tree)){
            *tree = *node;
        }
        else if (*node) {
            if ((*node)->m_data < (*tree)->m_data)
                insert (&(*node), &(*tree)->m_left);
            else
                insert (&(*node), &(*tree)->m_right);

        }
    }

    void travel (Node* tree) {
        if (tree) {
            travel (tree->m_left);
            cout << tree->m_data << ' ';
            travel (tree->m_right);
        }
    }

    Node* m_root; // 树根
    size_t m_size; // 大小
};

int main (void) {
    Tree tree;
    tree.insert (50);
    tree.insert (60);
    tree.insert (70);
    tree.travel();
    return 0;
}

如果你不用引用,也可以用指针的指针

结果一样

解决方案二:

去掉引用,你修改node,指向另一个对象,不会作用到实参上

解决方案三:

insert()当然要对数进行更改,当然就不能只传值,要传引用了。

解决方案四:

 #include <iostream>
#include <vector>
using namespace std;

 void func(int *m,int *n)
 {
     *n = *m;
 }

int main (void) {
    int *a = new int(10);
    int *b = new int (20);
    func(a,b);
    cout << *a << ' '<< *b;

    return 0;
}

我觉得这个和上边的原理一样吗,但是这个不加引用就可以,结果是两个10

解决方案五:

我觉得下边那个栗子和上边二叉树insert传参的原理一样,为什么下边传入的就是地址,上边的就“不能作用于实参”了?

时间: 2024-09-16 10:52:47

关于二叉树的插入,传参的小问题的相关文章

一个页面传参的小问题~

问题描述 [/code]例:<Ahref="list.aspx?title=<%#DataBinder.Eval(Container.DataItem,"nTitle")%>">用户</A>[/code]请问如何传多个参数?谢谢!~ 解决方案 解决方案二:+="参数"解决方案三:<Ahref="list.aspx?title=<%#DataBinder.Eval(Container.Dat

微信小程序链接传参并跳转新页面_javascript技巧

 像传统的传参一样,只是在微信里面的标签不一样而已,navigator标签的文档说明: https://mp.weixin.qq.com/debug/wxadoc/dev/component/navigator.html?t=20161122 下面是传递参数并展示新页面的一个简单栗子: 这是index.wxml代码: <navigator class="bury-wrapper wx-li" url="../detail/detail?id={{name.id}}&qu

Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式

1.extjs 给怎么给panel设背景色 设置bodyStyle:'background:#ffc;padding:10px;', var resultsPanel = Ext.create('Ext.panel.Panel', { title: 'Results', width: 600, height: 400, renderTo: Ext.getBody(), bodyStyle: 'background:#ffc; padding:10px;', layout: { type: 'vb

jsp中文页面乱码与传参乱码

  页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可 代码如下   <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %> 数据库乱码 这种乱码会使你插入数据库的中文变成乱码,或者读出显

Java中数组的创建与传参方法(学习小结)_java

(一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外一种方式: int[] score=null; //把中括号写在数组名前面 通常,在写代码时,为了方便,我们将两行合并为一行: int score[]=new int score[3]; //将数组申明与分配内存写在一行 (二)传递参数 由于初学java,这里只讨论值传递,不考虑地址传递.主要有3点

js html-在线等,急(大神帮帮忙):js动态嵌入html代码,代码中调用函数,当传参为字符串时,函数没有响应

问题描述 在线等,急(大神帮帮忙):js动态嵌入html代码,代码中调用函数,当传参为字符串时,函数没有响应 <!DOCTYPE html> <br> function insert()<br> {<br> var a="jioho";<br> var str="<table><tr><button type='button' onclick='test("+ a+"

servlet-关于jqgri传参问题,以及后台接收参数

问题描述 关于jqgri传参问题,以及后台接收参数 现在有个需求:进入一个列表页面,初始化的时候没有数据查询,当点击查询按钮,附带查询条件时,把参数传到后台,处理并返回json数据这样一个过程. 现在的问题是:初始化页面时没有参数,这个是完成了,但是附带查询条件点击查询时,这个参数怎么传递,后台servlet怎么接收,现在是通过postData方式传递参数(postData:{"txDate":txDate,"jobNameStr":jobName},后台reque

配置Tomcat解决URL传参引出的中文乱码问题

                         今天在写一个JSP页面时候,发现下面报错: <span style="font-size:18px;"> <a href="request.jsp?username=小七七">测试URL传参</a></span>     通常情况下,通过使用contentType和下面的就可以解决传参过程中的中文乱码问题,但是貌似URL传参还要设备别的东西. <% request

js实现页面a向页面b传参的方法_javascript技巧

本文为大家分享了js实现页面a向页面b传参的具体方法,供大家参考,具体内容如下 方法一:使用HTML5本地化存储(localStorage) 组件(本地最大能存储5M数据)localStorage是本地永久存储数据,是cookie的优化 方法二:使用cookie将数据存放在客户的浏览器 (最大存储2M数据) 方法三:使用url传参 (将要传递的数据保存为一个存储变量,然后传给url)方法如下; a.html var app = {}; app.list = '123' app.test = '1