简单编程题目连载(十五)——找二叉树中的最大搜索二叉子树

本文介绍了如何找到一棵二叉树中节点数最多的搜索二叉子树。首先定义了搜索二叉树的特性,即中序遍历结果为升序。提供了两种解决方案:一种是通过中序遍历逐个节点判断;另一种是利用后序遍历,通过比较左右子树的大小来确定最大搜索二叉子树。文章提供了具体的实现思路和代码示例。
摘要由CSDN通过智能技术生成

什么是搜索二叉树,每棵子树的头节点的值都比各自左子树上的所有节点值要大,也都比各自右子树上的所有节点值要小。

最好判断的一种方法是,中序遍历二叉树,遍历结果整个序列为升序,那么这棵树为搜索二叉树,也叫二叉查找树,二叉排序树。

那么本题题目为:给定一颗二叉树的头节点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这颗子树的头节点。

注意,给定的二叉树不一定是搜索二叉树,但整棵树一定有搜索二叉树,并且可能不止一个,需要找到节点数最多的那个。

很容易想到的思路是:遍历整颗树,把每一个节点当做头节点进行一次中序遍历,判断是否为搜索二叉树,并记录下这颗树的节点数,如果是搜索二叉树,保存该节点数和该头节点,然后继续遍历下一个节点,继续判断。

这个思路非常容易形成代码,并且是对的。整个代码如下:

    public TreeNode getMax(TreeNode root) {
        ArrayList<Integer> arr = new ArrayList<>();
        Stack<TreeNode> s = new Stack<TreeNode>();
        s.add(root);
        TreeNode goal = null;
        int max = 0;
        while(!s.isEmpty()){
            root = s.pop();
            midOrder(root,arr);
            boolean boo = tree(arr);
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值