453 - 두 갈래 나무를 체인 시계로 분해

1666 단어 lintcode
3.30
어제 반나절 동안 연락한 두 갈래 나무의 기본 조작에도 불구하고 오늘 제목을 짓는 것은 여전히 순조롭지 않다.
이리저리 돌아다니면서 좌우 나무를 고치려고 했지만 현실적이지 않은 것 같다.
어쩔 수 없이 먼저 훑어보는 결과를queue에 존재합니다
그리고queue를 훑어보고 하위 트리를 수정합니다.
/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
   public void flatten(TreeNode root) {
       if(root == null){
        	return;	
        }
        LinkedList list = new LinkedList();
        LinkedList queue = new LinkedList();
        TreeNode bt = root;
        while(bt != null || !list.isEmpty()){// write your code here
        	while(bt != null){
        		//System.out.print(bt.val + " ");
        		queue.addLast(bt);
        		list.push(bt);
        		bt = bt.left;
        		
        	}
        	if(!list.isEmpty()){
        		bt = list.pop();
        		//System.out.print(tmp.val + " ");
        		bt = bt.right;
        	}	
        }
        
        //System.out.print("
"); root = queue.pop(); bt = root; //System.out.print("
" + bt.val + " "); while(!queue.isEmpty()){ bt.left = null; bt.right = queue.getFirst(); bt = queue.pop(); //System.out.print(bt.val + " "); } bt.left =bt.right = null; } }

좋은 웹페이지 즐겨찾기