https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/
给定一个二叉树,原地将它展开为一个单链表。
思路:对于一个结点来说,如果有左孩子,他的next指向其左孩子,且他左子树的最右结点将指向他的右孩子
时间复杂度O(N),空间复杂度O(1)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public void flatten(TreeNode root) {
TreeNode now = root;
while(now != null){
if(now.left != null){ //找到左子树最右边的结点
TreeNode r = now.left;
while(r.right != null){
r = r.right;
}
r.right = now.right;//让左子树的最右结点指向右子树
now.right = now.left;
now.left = null;
}
now = now.right;
}
}
}