package tree;
/**
* 114. 二叉树展开为链表
*
* 给你二叉树的根结点 root ,请你将它展开为一个单链表:
*
* 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
* 展开后的单链表应该与二叉树 先序遍历 顺序相同。
*
*
* @author Tang
* @date 2021/7/26
*/
public class Flatten {
/**
* 前序遍历每个节点
* @param root
*/
public void flatten(TreeNode root) {
preSearch(root, null);
}
/**
* 前序遍历
* @param node 遍历到的当前节点
* @param listNode 链表的当前节点
* @return 最新的链表节点
*/
private TreeNode preSearch(TreeNode node, TreeNode listNode){
if(node == null){
return listNode;
}
TreeNode right = node.right;
TreeNode left = node.left;
node.left = null;
if(listNode == null){
listNode = node;
}else {
listNode.right = node;
listNode = listNode.right;
}
listNode = preSearch(left, listNode);
return preSearch(right, listNode);
}
public static void main(String[] args) {
}
}