剑指offer(Java版)day05:从上往下打印二叉树|二叉

2019-06-19  本文已影响0人  楠楠喜欢泡枸杞

    1从上往下打印二叉树

【题目】从上往下打印出二叉树的每个节点,同层节点从左至右打印。

【考察点】举例让抽象具体化;二叉树

【思路】用ArrayList创建两个集合,一个用来存储每个节点的值,一个用来模仿栈,按照从上到下从左到右的顺序将节点入栈。

【错误1】第一个集合类型是<Integer>,第二个集合的类型是<TreeNode>,一定要注意别写错了哦~

【错误2】第二个集合只是模仿栈,但是我弄假成真稀里糊涂真的把它当做栈来用,调用了栈的方法。。。

【代码】

    2二叉搜索树的后序遍历序列

【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

【考察点】举例让抽象具体化;二叉树

【思路】BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。每次去掉序列的最后一个元素,并将前面的元素分成两段继续递归。

【错误1】递归时两段元素的起止位置一定要弄清楚,改了好几次才改对。

【错误2】切记序列的最后一个元素不参与循环,也不参与递归,因为它是当前的root元素。

【错误3】递归的终止条件之一是(start<end),手误写成>了还找了半天问题在哪里。。。

【tips】理不清的时候自己写一个测试用例,跟着用例来编写思路会清晰很多!

【代码】

    3二叉树中和为某一值的路径

【思路】递归!若当前根节点不为null,则将它加入a序列。每次递归到叶节点后要将a序列中的最后一个节点删掉,以便返回上层继续寻找其它路径。

【考察点】举例让抽象具体化;二叉树

【错误1】注意审题,从根节点到叶节点才算一条路径,所以将a加入all的条件有三个。

【错误2】在遍历完一个节点的所有子节点后,要在a中remove当前节点,这个是很关键很关键的一步。

【关键】递归特别容易思路混乱,我特意把递归的过程画了一张图,这样思路就清晰了:

【代码】

上一篇下一篇

猜你喜欢

热点阅读