一、引言:
大三上学期学了数据结构后就没再接触过数据结构的内容了,至今已经整整两年半了,已经把链表,队列,堆栈,树,二叉树等内容忘得干干净净了,并且如果不是决定做《机器学习》的作业,自己丝毫没有意识到自己已经忘得干干净净,或者说是以前只是依样画葫芦的把二叉树的程序调出来了,但是根本就没有明白其中的原理!!
二、做《机器学习》作业的时候,怎么也想不明白两个问题:
第一个问题:
"p->next"表示什么?p是一个指针,指针怎么会有next呢?应该Node结构体才有next指针呀。
第二个问题:
怎么建立一棵树?杨惠说要传一个根结点,并返回该根结点,但是为什么要传一个根结点呢?返回一个根结点怎么就能表示一棵树了呢??真是想不明白!!
第三个问题:
建树函数buildTree()或者insert(),create()等需要设置几个参数?必须设置一个Node root参数吗?如果不设置root参数,怎么让它递归呢?
三、解决:
第一个问题:
唉,太久没看指针了,或者说以前根本就没有理解什么是指针,指针变量,指针变量所指向的变量等概念,复习了一遍谭浩强的C语言的书,感觉第一个问题豁然开朗。原来"p->next"表示的是:p指针变量所指向的变量的next指针变量。
第二个问题:
唉,看来以前根本没有理解二叉树,也没有理解递归方法,只因为吴平老师的一句“递归方法效率低”就完全不看递归了,真是傻瓜。不仅仅是递归,感觉自己连函数参数都不太理解,根本不知道什么时候需要参数,参数有何作用。更不用说明白一个函数的设计关键要清楚它传入什么参数,返回什么结果了。
第三个问题:
至今仍然不太明白!似乎就是必须接受一个Node root参数。
查了网上的递归建立二叉树的几个程序,它们分别是无参数、有一个参数、有两个参数的三种不同实现方法,从中终于领悟到什么时候需要参数,为什么需要参数了!可是第二、三个例子的一个参数和两个参数实际是一样的,只不过一个参