【LeetCode】【HOT】114. 二叉树展开为链表
package hot;
import java.util.ArrayList;
import java.util.List;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val = val;
}
}
public class Solution114 {
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(5);
TreeNode node4 = new TreeNode(3);
TreeNode node5 = new TreeNode(4);
TreeNode node6 = new TreeNode(6);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.right = node6;
Solution114 solution = new Solution114();
solution.method(node1);
System.out.println(solution.check(node1));
}
private void method(TreeNode root){
TreeNode cur = root;
while(cur != null){
while(cur.left != null){
TreeNode next = cur.left;
TreeNode predecessor = next;
while(predecessor.right != null){
predecessor = predecessor.right;
}
predecessor.right = cur.right;
cur.left = null;
cur.right = next;
}
cur = cur.right;
}
}
private List<Integer> check(TreeNode root){
List<Integer> res = new ArrayList<>();
while(root != null){
res.add(root.val);
root = root.right;
}
return res;
}
}
//时间复杂度为 O(n)
//空间复杂度为 O(1)