仔细观察,实际上我们要做的转化是将每个节点的左子节点插入到该节点和其右子节点之间。 采取中序遍历方式即可。。 要注意的是每一次完成了节点插入之后要将当前节点的左子节点设为null以避免之后的遍历中还访问导致效率降低
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
if(root == null )
{
return ;
}
fun(root);
}
void fun(TreeNode root)
{
if(root==null)
{
return ;
}
fun(root.left);
if(root.left!=null)
{
TreeNode tmp = root.right;
root.right = root.left;
root.left = null;
//TreeNode now = root;
while(root.right!=null)
{
root = root.right;
}
root.right = tmp;
}
fun(root.right);
return ;
}
}