题目描述:
Given a binary tree, flatten it to a linked list in-place.
For example, given the following tree:
1 / \ 2 5 / \ \ 3 4 6
The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
中文理解:
给定一个二叉树,将二叉树转换为深度遍历的只有右子树节点的二叉树。
解题思路:
深度遍历二叉树,得到深度遍历序列,然后该表该序列的指针。
代码(java):
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public void flatten(TreeNode root) {
if(root==null)return;
ArrayList <TreeNode> nodes=new ArrayList();
Stack<TreeNode> stack=new Stack<TreeNode>();
stack.push(root);
TreeNode temp=null;
while(!stack.isEmpty()){
temp=stack.pop();
nodes.add(temp);
if(temp.right!=null)stack.push(temp.right);
if(temp.left!=null)stack.push(temp.left);
}
for(int i=0;i<nodes.size()-1;i++){
nodes.get(i).left=null;
nodes.get(i).right=nodes.get(i+1);
}
nodes.get(nodes.size()-1).left=null;
nodes.get(nodes.size()-1).right=null;
}
}