码迷,mamicode.com
首页 > 其他好文 > 详细

刷题--二叉树(2)

时间:2020-02-05 10:04:59      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:ast   The   col   solution   return   com   左右子树   att   not   

二叉树结构变化

例 lintcode 453. Flatten Binary Tree to Linked List https://www.lintcode.com/problem/flatten-binary-tree-to-linked-list/

traversal :因为是按照前序遍历的顺序将其转换结构,所以就按照前序遍历进行递归,全局变量是root根节点,每进行一次前序遍历就进行一次结构的变换。这里会出现后效性的问题,也体现了对于二叉树问题,首先考虑分治解决。

 

divide conquer :二叉树问题用分治法的思路就是考虑这棵树在问题的答案上和左右子树在答案上有什么关系。先考虑如果左右子树已经返回了结果,根需要怎么操作。左子树的尾节点需要指向右子树的头,根的左子树为null,右孩子指针指向左子树。所以需要知道左子树的尾节点。因为最终不需要返回值,所以recursion函数的返回值就可以是尾节点。当左子树尾节点不为空的时候,就进行一次变换。返回的时候,首先判断右子树的尾节点是否为空,不为空就返回。之后是左子树尾节点判断,最后剩下的情况返回root。recursion的结束是root == null。

public class Solution {
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
    public void flatten(TreeNode root) {
        helper(root);
    }
    
    public TreeNode helper(TreeNode root){
        if(root == null)return null;
    
        TreeNode leftLast = helper(root.left);
        TreeNode rightLast = helper(root.right);
        
        if(leftLast != null){
            leftLast.right = root.right;
            root.right = root.left;
            root.left = null;
        }
     
        if(rightLast != null){
            return rightLast;
        }
        
        if(leftLast != null){
            return leftLast;
        }
    
        return root;
    }
}

 

刷题--二叉树(2)

标签:ast   The   col   solution   return   com   左右子树   att   not   

原文地址:https://www.cnblogs.com/2333wzl/p/12262376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!