import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return TreeNode类
*/
public static LinkedList<Integer> linkedList = new LinkedList<>();
public TreeNode flattenII (TreeNode root) {
// write code here
search(root);
TreeNode result = new TreeNode(0);
TreeNode node = result;
for (int i = 0; i < linkedList.size(); i++) {
result.right = new TreeNode(linkedList.get(i));
result.left = null;
result = result.right;
}
result.right = null;
result.left = null;
return node.right;
}
public void search(TreeNode root) {
if (root == null) {
return;
}
search(root.left);
linkedList.add(root.val);
search(root.right);
}
}
本题考察的知识点是二叉树的中序遍历和链表,所用编程语言是java。
二叉树的中序遍历是先遍历左子树,再遍历分支节点,最后遍历右子树。我先用LinkedList存储了二叉树的中序遍历序列,然后重建链表。

京公网安备 11010502036488号