题目:
思路:
首先明确一下什么是搜索二叉树,如果有左子树的话该值小于根结点的值,如果有右节点的话,该值大于根结点的值。
该题要求是转化为一个排序的双向链表,由于搜索二叉树本身就有值的大小比较,所以我们可以采用树的中序遍历。这样读取出来的数据正好是排好序的。同时由于是双向链表,我们应该注意到每个节点都有左右指针,这点需要注意。
树的中序遍历:中序时相对于根结点而言的,先遍历左后根最后右
代码:java
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
TreeNode head = null;
TreeNode realHead = null;
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return realHead;
}
private void ConvertSub(TreeNode pRootOfTree) {
if(pRootOfTree==null)
return;
//中序遍历开始采用递归形式
ConvertSub(pRootOfTree.left);//左
if (head == null) { //根
head = pRootOfTree;
realHead = pRootOfTree;
} else {
head.right = pRootOfTree;
pRootOfTree.left = head;
head = pRootOfTree;
}
ConvertSub(pRootOfTree.right); //右
}
}
else部分的解释
前两行是赋值两个指针
后一行是将head给下一个,继续遍历。