leetcode06(暴力树+二叉树性质)

目录

一道二叉树搜索题

寻找共同祖先

二叉树中序前序后序遍历


两天没刷一下落下四道

一道二叉树搜索题

关键在于左子树只包含小于它的,右子树只包含大于他的,我们可以利用它的性质,定义一个max和一个min,然后根据root的val值进行局部划分,也就是递归,当左边右边都满足时,说明为true

class Solution {
    public boolean isValidBST(TreeNode root) {
         return isBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }

    public boolean isBST(TreeNode node,long lower,long upper){
        if(node==null){
            return true;
        }
        //如果节点不在这个范围内就false,一开始会给个max 与min,默认所有值都可以为节点
        if(node.val<=lower||node.val>=upper){
           return false;
        }
        //递归然后对值进行限制,两边,一边是左子树,一边为右子树
        return isBST(node.left,lower,node.val)&&isBST(node.right,node.val,upper);
    }
}

寻找共同祖先

这题直接暴力,寻找p,q两个节点的共同祖先,我们可以从root下手 ,while循环进行遍历,只要不等于pq两个目标节点就一直循环,如果大于root,root节点就右移,否则左移,中途节点全部加入list中,直至找到pq节点为止,然后对两个list进行遍历,寻找相同节点

 

package com;

import java.util.ArrayList;
import java.util.List;

public class Test {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
       //1.new两条路径,然后得到共同节点就完了
        List<TreeNode> path_p = getPath(root, p);
        List<TreeNode> path_q = getPath(root, q);

        //定义一个共同祖先
        TreeNode ancestor=null;
        for (int i = 0; i < path_q.size()&&i<path_p.size(); i++) {
            if(path_p.get(i)==path_q.get(i)){
                ancestor=path_p.get(i);
            }else{
                break;
            }
        }
        return ancestor;
    }

    //2.辅助方法,传入一个节点和一个目标节点得到路径节点集合
    public List<TreeNode> getPath(TreeNode root,TreeNode target){
        ArrayList<TreeNode> path = new ArrayList<>();
        TreeNode node = root;

        //利用循环添加路过节点
        while(node!=target){
            //只要不等于目标节点,就将其添入
            path.add(node);
            if(node.val<target.val){
                node=node.right;
            }else{
                node=node.left;
            }
        }

        //找到目标节点,将其添入
        path.add(target);
        return path;
    }

}
class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x) { val = x; }
 }

二叉树中序前序后序遍历

(31条消息) 二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解_白夜行的狼的博客-CSDN博客_中序遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值