剑指Offer第十七题:二叉搜索树与双向链表

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

题目分析

这个题目也难住了我好长时间,然而这个题的关键就在于,二叉树的中序序列,总所周知:二叉搜索树的左节点小于根节点,右节点大于根节点;所以这个题目的要求换成一个排序的双向链表,然而中序序列就是排好序的。这个递归就根据当初的二叉树的中序遍历来更改就可以了,更改的部分就是更改节点left和right指向的位置,因为二叉树的结构和双向链表的结构差不多的。

 

1         public void mid(TreeNode root){
2             mid(root.left);
3             System.out.println(root.val);
4             mid(root.right);
5         }

  二叉树的中序遍历如上,然而我们需要更改的部分就是条输出语句的部分。

源代码

 1     public class Solution6666 {
 2         TreeNode head=null;
 3         TreeNode stdHead=null;
 4         public TreeNode Convert(TreeNode pRootOfTree) {
 5             SubConvert(pRootOfTree);
 6             return stdHead;
 7         }
 8         
 9         public void SubConvert(TreeNode pRootTree) {
10             if(pRootTree==null) return;
11             SubConvert(pRootTree.left);
12             if(head==null) {
13                 head=pRootTree;
14                 stdHead=pRootTree;
15             }else {
16                 head.right=pRootTree;
17                 pRootTree.left=head;
18                 head=pRootTree;
19             }
20             SubConvert(pRootTree.right);
21         }
22 }

 

posted @ 2018-09-07 17:19  轻抚丶两袖风尘  阅读(118)  评论(0)    收藏  举报