您的位置:首页 > 其它

二叉树平摊

2016-04-26 19:53 302 查看
将一颗二叉树平摊开来,如下:

         1

        / \

       2  5

      / \   \

     3  4   6
The flattened treeshould look like:
  1

    \

     2

      \

       3

        \

         4

          \

           5

            \

             6
 

 
 
 
思路:
对每个节点,将左节点赋给右节点,同时用递归将左节点flat,然后返回的flat的尾部,将右节点加在尾部的右节点上,并再用递归将其flat一下。
 
 
代码:
public classSolution {
    public void flatten(TreeNode root) {
        if(root == null){
            return;
        }
        dfs(root);
    }
    public TreeNode dfs(TreeNode root){
        if(root == null){
            return null;
        }else if(root.left == null &&root.right == null){
            return root;
        }else{
            TreeNode left = root.left;
            TreeNode right = root.right;
            root.left = null;
            if(left != null){
                root.right = left;
                TreeNode tmp = dfs(left);
                tmp.left = null;
                if(right != null){
                    tmp.right = right;
                }else{
                    return tmp;
                }
               
            }
            return dfs(right);
        }
       
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 二叉树