本文共 1372 字,大约阅读时间需要 4 分钟。
题解:给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树将其展开为:
题解(一):先用递归的方法先序遍历二叉树,设置一个链表保存每一个二叉树结点,然后再按照此链表保存的二叉树结点重构二叉树
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) { LinkedListlist=new LinkedList<>(); move(list,root); int size=list.size(); TreeNode temp=root; for(int i=1;i linkedList,TreeNode root){ if(root!=null){ linkedList.add(root); move(linkedList,root.left); move(linkedList,root.right); } }}
题解(二):遍历二叉树的方法不一定是递归,二叉树的遍历本质上来说是DFS算法,我们还可以利用栈实现二叉树的遍历
class Solution { public void flatten(TreeNode root) { LinkedListlist=new LinkedList<>(); Stack stack=new Stack<>(); TreeNode next=root; while(!stack.empty()||next!=null){ while(next!=null){ stack.push(next); list.add(next); next=next.left; } next=stack.pop().right; } int size=list.size(); TreeNode temp=root; for(int i=1;i
转载地址:http://ivsl.baihongyu.com/