剑指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 }

浙公网安备 33010602011771号