您的位置:首页 > Web前端

剑指offer-二叉搜索树与双向链表

2015-08-17 15:10 211 查看
题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。空间复杂度为O(1).

最笨的方法就是中序遍历放在一个数组或链表中,再次遍历串联起来。但是要求空间复杂度为O(1),就没办法这么做了,这时候可以参考这个解法:/article/10984903.html判断一个树是不是一颗二叉搜索树,可以模仿最后的那个方法。

本题跟书上的解法不一样,感觉这个稍微要简洁好理解,不过都是中序遍历的模型。

private TreeNode pre = null;
private static TreeNode head = null;
public void convert(TreeNode root) {
if (root == null) return;
convert(root.left);
if (pre != null) {
pre.right = root;
root.left = pre;
} else {
head = root;
}
pre = root;
convert(root.right);
}


最后的head就是转化后链表的表头。还是那样的总结,在树这种数据结构上,很多模板都是可以套用的,比如做过上面那个题,下面那个就很容易改造出来了。对比一下会发现,代码真的及其相似。树的很多工具类方法,比如树的层次遍历,求树的高度等等问题,都可以熟记,然后改造。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: