您的位置:首页 > 其它

114. Flatten Binary Tree to Linked List

2017-04-04 19:42 190 查看
Given a binary tree, flatten it to a linked list in-place.

For example,

Given

1
/ \
2   5
/ \   \
3   4   6


The flattened tree should look like:

1

\

2

\

3

\

4

\

5

\

6

click to show hints.

Hints:

If you notice carefully in the flattened tree, each node’s right child points to the next node of a pre-order traversal.

On, On

/**
* 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) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
if (!stack.isEmpty()) node.right = stack.peek();
node.left = null;
}

}
}


On, O1

/**
* 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) {
if (root == null) return;
TreeNode node = root;
while (node != null) {
if (node.left != null) {
TreeNode tmp = node.left;
while (tmp.right != null) tmp = tmp.right;
tmp.right = node.right;
node.right = node.left;
node.left = null;
}
node = node.right;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: