二叉搜索树 :又称二叉排序树,它可以是以棵空树,或者具有以下性质的二叉树:
- 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
- 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
- 它的左右子树也分别为二叉搜索树。
eg:
解题思路:
1>类比双向链表;
2>中序遍历这棵二叉树 ;
3>题目要求不能创建新的节点,意味着,需要改变原来树的结构。
如图:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode prev = null;
public void ConvertChild(TreeNode pCur){
if (pCur == null){
return;
}
ConvertChild(pCur.left);
pCur.left = prev;
if (prev != null){
prev.right = pCur;
}
prev = pCur;
ConvertChild(pCur.right);
}
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null){
return null;
}
ConvertChild(pRootOfTree);
TreeNode head = pRootOfTree;
while(head.left != null){
//双向链表,寻找头节点并返回
head = head.left;
}
return head;
}
}