递归思路:
每次回溯的时候:
1. 如果时左子树,就找到左子树最右边那个结点与根节点相连;
2. 如果是右子树,就找到右子树中最左边那个结点与根节点相连。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return null;
if(pRootOfTree.left == null && pRootOfTree.right == null){
return pRootOfTree; // 叶子结点返回自己
}
if(pRootOfTree.left != null){
TreeNode left = Convert(pRootOfTree.left);
// 找到left最右边的点和root链接
while(left.right != null){
left = left.right;
}
pRootOfTree.left = left;
left.right = pRootOfTree;
}
if(pRootOfTree.right != null){
TreeNode right = Convert(pRootOfTree.right);
// 找到right最左边的点和root链接
while(right.left != null){
right = right.left;
}
pRootOfTree.right = right;
right.left=pRootOfTree;
}
while(pRootOfTree.left != null) pRootOfTree=pRootOfTree.left;
return pRootOfTree;
}
} 
京公网安备 11010502036488号