题目
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
将其展开为:
算法
public class P114 {
public void flatten(TreeNode root) {
convertNode(root,null);
return;
}
private TreeNode convertNode(TreeNode node,TreeNode lastNode){
if(node==null){
return null;
}
TreeNode cur = node;
TreeNode curl = node.left;
TreeNode curr = node.right;
cur.left = null;
if(lastNode!=null){
lastNode.right=cur;
}
lastNode = cur;
if(curl!=null){
lastNode = convertNode(curl,lastNode);
}
if(curr!=null){
lastNode = convertNode(curr,lastNode);
}
return lastNode;
}
}
思路:
- 将当前节点的左右子树记下来
- 将当前节点的左子树置为空
- 将上一节点的右子树置为当前节点
- 将当前节点置为上一节点
- 前序遍历二叉树