二叉树展开为链表
题目:
给定一个二叉树,原地将它展开为一个由右子树连接的单链表。
思路:定义一个方法,传入当前节点与上一个需要被连接的节点。返回值是此节点以及所有子树处理完毕后的最后一个节点。递归调用即可。(要注意先处理左子节点,然后提前存好右子节点)
附上代码
public void flatten(TreeNode root) {
if(root == null){
return;
}
TreeNode lastNode = root;
TreeNode right = root.right;
TreeNode left = root.left;
root.left = null;
root.right = null;
if(left != null){
lastNode = flatten(left,lastNode);
}
if(right != null){
lastNode = flatten(right,lastNode);
}
}
public TreeNode flatten(TreeNode currentNode, TreeNode lastNode) {
lastNode.right = currentNode;
lastNode = currentNode;
TreeNode left = currentNode.left;
TreeNode right = currentNode.right;
currentNode.left = null;
currentNode.right = null;
if(left != null) {
lastNode = flatten(left, lastNode);
}
if(right != null) {
lastNode = flatten(right, lastNode);
}
return lastNode;
}