LeetCode-114.二叉树展开为链表(相关话题:深度优先)

给定一个二叉树,原地将它展开为链表。

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:

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(null == root)
            return;
        Stack<TreeNode> stack = new Stack<>();
        TreeNode p = root;
        while(null != p.left || null != p.right){
            if(null != p.left && null != p.right)
                stack.push(p.right);
            if(null != p.left){
                p.right = p.left;
                p.left = null;
            }

            p = p.right;
        }
        while(!stack.isEmpty()){
            TreeNode tmp = stack.pop();
            p.right = tmp;
            p = p.right;
            while(null != p.left || null != p.right){
                if(null != p.left && null != p.right)
                    stack.push(p.right);
                if(null != p.left){
                    p.right = p.left;
                    p.left = null;
                }

                p = p.right;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38823568/article/details/83186716