问题描述:给你二叉树的根节点root,请你将他展开为一个链链表:展开后的单链表应该同样适用TreeNode其中right指向链表的下一个节点,而左指针始终为null,展开后的单链表应该与二叉树的先序遍历顺序相同。
?
TreeNode pre=null;
public void expand(TreeNode root)
{
if(root==null){return null;}
if(pre==null)
{
expand(root.left);
expand(root.right);
}else
{
pre.right=root;
pre.left=null;
pre=root;
expand(root.left);
expand(root.right);
}
}
public TreeNode expand(TreeNode root)
{
expand(root);
???????return root;
}
重建二叉树的方式,首先通过前序遍历将二叉树放入链表中,然后依次拿出来进行,处理。
public void expand(TreeNode root,List<TreeNode>res)
{
if(root==null){return;}
res.add(0,root);
expand(root.left,res);
expand(root.right,res);
}
public TreeNode expand(TreeNode root)
{
List<treeNode>res=new LinkedList<>();
expand(root,res);
TreeNode pre=null;
for(treeNode node:res)
{
if(pre!=null)
{
pre.right=node;
pre.left=null;
}
???????pre=node;
}
}