赞
踩
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
- 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;
- }
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。