leetcode15: flatten binary tree

来源:互联网 发布:淘宝店铺被关闭了24分 编辑:程序博客网 时间:2024/05/16 11:21

Flatten Binary Tree to Linked ListOct 14 '12

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


/** * Definition for binary tree * 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;        TreeNode pre = new TreeNode(0);        Stack<TreeNode> stack = new Stack<TreeNode>();                while(!stack.isEmpty() || node != null) {            if(node==null) {                node = stack.pop();            } else{                if(node.right!=null) stack.push(node.right);                pre.right = node;                pre.left = null;                pre = node;                node = node.left;            }        }            }}



in-place

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    void flatten(TreeNode *root) {        if(root==nullptr) return;        stack<TreeNode*> sta;        sta.push(root);                while(!sta.empty()) {            TreeNode * n = sta.top();            sta.pop();                        if(n->right!=nullptr) sta.push(n->right);            if(n->left!=nullptr) sta.push(n->left);                        n->left = nullptr;            if(sta.empty() ){                 n->right = nullptr;            } else                 n->right = sta.top();        }    }};


not in-place

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public void flatten(TreeNode root) {        // Start typing your Java solution below        // DO NOT write main() function        Queue<TreeNode> queue = new LinkedList<TreeNode>();                //preorder traversal.        Stack<TreeNode> stack = new Stack<TreeNode>();                TreeNode node = root;                        while(!stack.isEmpty() || node != null) {            if(node!=null) {                queue.add(node);                stack.push( node );                node = node.left;            } else {                node = stack.pop();                node = node.right;            }        }                        while( !queue.isEmpty() ) {            node = queue.remove();            node.left = null;            node.right = queue.peek();        }    }}



原创粉丝点击