热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode【中等】114、二叉树展开为链表

思路一:递归先序遍历中左右,即把左放在右的位置,再把右接在左的下面classSolution:defflatten(self,root:

在这里插入图片描述

思路一:递归先序遍历
中左右,即把左放在右的位置,再把右接在左的下面

class Solution:def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""if not root or (not root.left and not root.right):return #处理左右子树self.flatten(root.left)self.flatten(root.right)#中左右---中,把左放在右,把右放在左下面tmp=root.rightroot.right=root.leftroot.left=None#找到新树右的末尾,把原右(tmp)接在后面while(root.right):root=root.rightroot.right=tmp

class Solution {public void flatten(TreeNode root) {if(root==null || (root.left==null && root.right==null)){return;}flatten(root.left);flatten(root.right);TreeNode temp=root.right;root.right=root.left;root.left=null;while(root.right!=null){root=root.right;}root.right=temp;}
}

思路二:非递归

class Solution:def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""stack=[]while root or stack:if root:stack.append(root)root=root.leftelse:node=stack.pop()tmp=node.rightroot=tmp#以上是前序遍历,以下是每个结点处的操作node.right=node.leftnode.left=Nonewhile node.right:node=node.rightnode.right=tmp

class Solution {public void flatten(TreeNode root) {List<TreeNode>stack&#61;new ArrayList<>();while(root!&#61;null || stack.size()!&#61;0){if(root!&#61;null){stack.add(root);root&#61;root.left;}else{TreeNode node&#61;stack.remove(stack.size()-1);TreeNode temp&#61;node.right;root&#61;temp;node.right&#61;node.left;node.left&#61;null;while(node.right!&#61;null){node&#61;node.right;}node.right&#61;temp;}}}
}


推荐阅读
author-avatar
舞倾城2010_217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有