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) {
    }
}