当前位置:   article > 正文

leetcode114. 二叉树展开为链表

leetcode114

题目描述:
给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
在这里插入图片描述
解题思路:要求与先序遍历展开相同。
为此我们可以考虑按照后序遍历的形式,先访问右子树,再访问左子树,最后访问根结点,同时使用一个前驱节点:保存前驱节点。(类似头插法:每次都将访问到的节点插到链表的头部:比如图中例子,最先访问到6节点,其次是5,我们需要将5插入到6的前面,依次类推,4要插入到5的前面)

class Solution {
	
    TreeNode pre = null;
    public void flatten(TreeNode root) {
        if(root == null) {
            return ;
        }
        //访问右子树再访问左子树(和平时的后序遍历访问左子树,再访问右子树有区别,因为做头插法类似的操作)
        flatten(root.right);
        flatten(root.left);
        //头插
        root.right = pre;
        root.left = null;
        //更新前驱
        pre = root;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/42653
推荐阅读
相关标签
  

闽ICP备14008679号