标签:
题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。空间复杂度为O(1).
最笨的方法就是中序遍历放在一个数组或链表中,再次遍历串联起来。但是要求空间复杂度为O(1),就没办法这么做了,这时候可以参考这个解法:http://blog.csdn.net/my_jobs/article/details/47666909判断一个树是不是一颗二叉搜索树,可以模仿最后的那个方法。
本题跟书上的解法不一样,感觉这个稍微要简洁好理解,不过都是中序遍历的模型。
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就是转化后链表的表头。还是那样的总结,在树这种数据结构上,很多模板都是可以套用的,比如做过上面那个题,下面那个就很容易改造出来了。对比一下会发现,代码真的及其相似。树的很多工具类方法,比如树的层次遍历,求树的高度等等问题,都可以熟记,然后改造。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/my_jobs/article/details/47725293