Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
题意:将二叉树按照先序遍历的顺序展现成上述仅有右节点的形式。
解题思路:
1.将二叉树先序遍历,把节点中的数字存储在list中。
2.按照题意重新循环构造二叉树。
下面贴代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
List<Integer> list = new ArrayList<>();
if(root != null) {
Preorder(root,list);
TreeNode tn = root;
list.remove(0);
for(int k : list){ //循环构造题目要求的二叉树
// System.out.print(k);
root.right = new TreeNode(k); //右节点定义值
root.left = null; //左节点为空
root = root.right;
}
}
}
public void Preorder(TreeNode root ,List list){ //将二叉树先序遍历,节点值存储在list中
list.add(root.val);
if(root.left != null){
Preorder(root.left,list);
}
if(root.right != null){
Preorder(root.right,list);
}
}
}
题目很简单,有一点是需要注意的:
系统对你的解法进行判断时,是传入一个TreeNode参数,你的解法必须在这个结点上更改树的结构,本质上应该就是一个指针的问题,注意到就好了。