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

来源:互联网 发布:debug意思网络用语 编辑:程序博客网 时间:2024/05/17 03:11

题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。空间复杂度为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就是转化后链表的表头。还是那样的总结,在树这种数据结构上,很多模板都是可以套用的,比如做过上面那个题,下面那个就很容易改造出来了。对比一下会发现,代码真的及其相似。树的很多工具类方法,比如树的层次遍历,求树的高度等等问题,都可以熟记,然后改造。


0 0
原创粉丝点击