以先序遍历的结点顺序为链表的结点顺序
题目来自Leetcode-----114
以下是我个人的写法,并不像答案那么简练,但构建的过程会更加清晰。(有错误请指出谢谢大家!)
首先我来讲解我的思路,本地操作,故不存在new新结点的行为。
那么如何实现呢?
1.首先确定遍历方式-----先序遍历(dfs)
2.我们以二叉树结点的right作为链表结点的next
3.问题就在于如何在dfs的过程中把链表构建出来:
1)设置两个临时指针保留当前结点的左右孩子,并将当前结点的左右孩子销毁
TreeNode left = root.left;
TreeNode right = root.right;
root.left = null;
root.right = null;
2)接下来就是构建链表:
这里我才用结点尾部插入的方式(parent即为最后一个结点)
parent.right = root ;(这里的root已经经过上述的处理)
3)注意事项:左树构建完毕后,记得把parent(即为代码中的node)更新为当前链表的最后一个元素,
不然构建出来的就不对了。
lass Solution009 {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.left.right = new TreeNode(<