美文网首页
剑指offer(Java版)day05:从上往下打印二叉树|二叉

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

作者: 楠楠喜欢泡枸杞 | 来源:发表于2019-06-19 17:57 被阅读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当前节点,这个是很关键很关键的一步。

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

    【代码】

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/jsflqctx.html