144 二叉树的前序遍历 点击此处返回总目录 145 二叉树的后序遍历 94 二叉树的中序遍历
144 二叉树的前序遍历 【题目】
【方法一:递归】 写法一:搞一个全局的list。
结果:1ms
写法二:直接加。 结果:2ms
写法三:把List当做参数传递。 结果:
写法一和写法三各有优劣,差不多。写法二最差。
【方法二:非递归】 写法一:
结果:
写法二: 如果写法一,不写第35句,则在添加节点的时候首先要判断是否为空。也就是需要增加下面代码的1,修改2和3。
写法一和二差不多。写法一简洁一点,但是会把空节点加到栈里面,先进栈,出来再判断。写法二,繁琐一点,先判断在进栈。会快一点。
145 二叉树的后序遍历 【题目】
【方法一:递归】
结果:
【方法二:非递归】 后序遍历是左右中。当有堆栈来存储节点,要分清是从左子树返回来的还是从右子树返回来的。如果是从右子树返回来的,才访问改节点。如果是从左子树(右子树还没有访问的情况)返回来的,则访问右子树。
记住这个代码就行了。比较经典的写法。可以自己动手模拟一下。
代码:
结果:
【方法三:非递归:通过前序遍历来实现】 因为前序遍历的顺序是:中左右。根据前序遍历的代码,略加修改就可以写出"中右左"的代码。再反过来就是"左右中",即后序遍历了。
代码:
结果:
这种方法会慢一点,因为最后还要反转。
94 二叉树的中序遍历 【题目】
【方法一:递归】
代码:
结果:
【方法二:非递归】 首先去它的最左边。 然后出来的时候,访问完。再去它的右边。
代码:
结果:
|