lintcode:将二叉树拆成链表
2016-07-07 19:46
363 查看
题目
将一棵二叉树按照前序遍历拆解成为一个
注意事项
不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。
样例
解题
修改前序遍历
将一棵二叉树按照前序遍历拆解成为一个
假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
注意事项
不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。
样例
1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6 4 \ 5 \ 6
解题
修改前序遍历
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: a TreeNode, the root of the binary tree * @return: nothing * 前序遍历:根左右 * 修改根的right指向左部分 * 左部分的right指向右部分 */ public void flatten(TreeNode root) { // write your code here // 空结点 if(root == null) return; // 左右结点都空 if(root.left==null && root.right==null) return; // 左结点空 if(root.left==null){ TreeNode right = root.right; flatten(right); return; } // 右节点空 if(root.right==null){ TreeNode left = root.left; root.right = left; flatten(left); root.left = null;// left结点设置为空 return; } // 左右结点都不空 TreeNode left = root.left; TreeNode right = root.right; root.right = left; flatten(left); TreeNode p = left; while(p.right!=null){ // 找到left部分的最右结点 p = p.right; } p.right = right; flatten(right); root.left = null; // left结点设置为空 return; } }
相关文章推荐
- js兼容性大全(持续更新)
- GCC优化选项(2)
- php高效率写法
- 小sugar呀____插入排序
- 某个Java老师的话
- 计算机图形的创建过程
- leetcode——Single Number III
- 【九度OJ】:九度OJ 1056
- win7基于maven和eclipse连接远程Linux服务器的hadoop2.0集群的入门程序
- Codeforces Round #361 (Div. 2) D. Friends and Subsequences 二分
- okhttp3的简单使用
- 倒计时js代码 时分秒-天时分秒
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
- 【bzoj2500】幸福的道路 单调队列+树形dp
- 数据结构与算法概述
- Java中的关键字
- 计算系数(codevs 1137)
- RTMP流媒体服务端应用开发系列 – Nginx-Rtmp分离音视频流<转>
- Bootloader - Main system - Recovery的三角关系
- linux用户权限