首先,大部分解决方法基本上都是给定二叉树的根节点,然后进行,先,中,后序进行遍历。
不是字面意思上的那种,先就是从头到尾,中就是给定一个中间节点,然后进行前后遍历!,根不是从最后节点开始的。而都是从二叉树的头(根),进行往下遍历开始!
这使我进入了一个误区,我说大部分资料里面的遍历操作为什么那么简洁,短小!原来是这样子弄的。我说为什么没有if判断该节点的父节点是否为null,该节点在父节点的左边还是右边!
如果用我的那种方式进行判断的话,结构会进行很复杂的if判断,是否节点是尾结点,节点下面是否还有子节点,节点上面是否还有父节点,节点是在父节点的左边还是右边(因为如果中序节点的时候,如果给定的节点是在父节点的左边那么它与这个节点在父节点右边时的逻辑完全相反即可)。
并且还要有一种方法进行判断该二叉树是否遍历已经完成。有一种解决方案就是,为结构体(C语言)里面再添加一个元素,用来标识,该节点是否进行了遍历!
递归嘛就是多级函数调用,fun(){ fun(){ } } 这样大镜子里面套小镜子无限循环(当然你要设置限制,来能使它跳出循环中。)通过调用递归的方式可以使代码整洁,当然逻辑设计的时候可能比较难一些,因为你要考虑每一个节点在运行这个函数的时候,运行的代码都是一样的!
而非递归就是一个函数里面解决问题。
递归也是循环,只是它的循环程序设计者不用担心,系统会帮你做。
而非递归就是,将递归拆分出来,用循环来实现函数的层叠调用,而每个函数里面的数据用栈来进行存储!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。