二叉树问题,两种解决方法(1遍历 2直接定义名字功能递归

1第一种方法就是另写一个traverse方法,2第二种方法就是把函数名当成已经实现的功能,直接写

1、翻转二叉树

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null) return null;
        TreeNode left=invertTree(root.left);
        TreeNode right=invertTree(root.right);
        root.left=right;
        root.right=left;
        return root;
    }
}

2、

填充结点的右侧指针

可用层序遍历,或者遍历。

有空隙就遍历!

class Solution {
    public Node connect(Node root) {
        if(root==null) return null;
        traver(root.left,root.right);//遍历空隙
        return root;
    }
    public void traver(Node n1,Node n2){
        if(n1==null|| n2==null) return;
        n1.next=n2;
        traver(n1.left,n1.right);
        traver(n2.left,n2.right);
        traver(n1.right,n2.left);
    }
}

二叉树展开为链表

class Solution {
    public void flatten(TreeNode root) {
        if(root==null) return;
        flatten(root.left);
        flatten(root.right);
        TreeNode left=root.left;
        TreeNode right=root.right;//记录拉直后的结点!
        root.left = null;
        root.right = left;
        TreeNode p=root;
        while(p!=null&&p.right!=null){
            p=p.right;//p为指针,一直向右遍历找最后一个
        }
        p.right=right;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值