赞
踩
class Solution { public void flatten(TreeNode root) { if(root == null) return; // 分解的思维 flatten(root.left); //左子树展开 flatten(root.right); //右子树展开 //将当前左子树变成右子树,之前的右子树接到新的右子树的最右边 TreeNode right = root.right; //先将右子树保存 root.right = root.left; //1.搬左子树,将左子树变成右子树 root.left = null; TreeNode p = root; while(p.right != null){ //找到原左子树的最右边节点 p = p.right; } p.right = right; //2.将之前的右子树接到当前右子树的最右边 } }
class Solution { List<TreeNode> tmp = new ArrayList<>(); // 外部变量 public void flatten(TreeNode root) { if(root == null) return; traverse(root); //修改指针域,变成链表 for(int i = 1; i < tmp.size(); i++){ TreeNode pre = tmp.get(i - 1); TreeNode next = tmp.get(i); pre.left = null; pre.right = next; } } private void traverse(TreeNode root){ //前序遍历函数 if(root == null) return; tmp.add(root); // 保存前序遍历结果 traverse(root.left); traverse(root.right); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。