关于二叉树后序遍历和递归

关于二叉树后序遍历和递归


一些基础递归题目来源牛客网→剑指offer

跳台阶:一只青蛙可以一次性跳1个台阶也可以一次性跳两个问青蛙一次性跳n个台阶有几种跳法。

解题思路:
首先如果我们按照正常的思路想一只青蛙跳一个台阶的跳法肯定只有1种,跳两个台阶的方法肯定只有2种,拿我们跳三个台阶的方法我们是否可以想成先跳一个台阶在跳剩余两个台阶和先跳了两个台阶在跳剩余一个台阶这两种方式,所以依次类推,我们就可以求出n个台阶的跳法,具体用代码我们就可以运用递归循环调用,这里我运用C++进行实现。
class Solution {
public:
    int jumpFloor(int number) {
        if(number == 0)return 0;
        if(number == 1)return 1;
        if(number == 2)return 2;
        return jumpFloor(number-1)+jumpFloor(number-2);
    }
};

//首先递归也可以理解为一种函数循环调用的一种循环所以肯定要有结束的标志,所以这里我们要进行对于特殊值的标定
if(number == 0)return 0;
if(number == 1)return 1;
if(number == 2)return 2;

n = 4 的流程图

在这里插入图片描述


输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同

解题思路,首先我们知道后序遍历是根据左右根的顺序遍历的,而且不难发现这个遍历的数组的中的规律是最后一位是根结点,前半段是根结点的左,前半段的后面是根结点的右部分,因为我们可以根据这个规律来实现这个函数。且因为是根据有序二叉树的法则根结点的左侧小于根结点,根结点的右侧大于等于根结点,因为这里已经假设不存在相等的数字,因此更有利于判断。

class Solution {
public:
 bool is_post(vector<int> sequence,int begin,int end)
 {
     if(begin >= end)return true;
     int i = begin;
     for(;i<end;i++)
     {
         if(sequence[end]<sequence[i])
             break;
     }
     for(int j = i ;j<end;j++)
     {
         if(sequence[j]< sequence[end])
             return false;
     }
     bool fl = is_post(sequence,begin,i-1);
     bool fr = is_post(sequence,i,end-1);
     return fl && fr;
 }
 bool VerifySquenceOfBST(vector<int> sequence) {
     int len = sequence.size();
     if(sequence.size()== 0)
         return false;
     return is_post(sequence,0,len-1);
 }
};

if(sequence.size() == 0)首先判断是否为空如果为空则返回false
子函数is_post 需要传入 数组 数组的首地址 尾地址
首先递归循环的跳出标志当 begin > = end 时候我们返回上层函数i,然后我们需要知道那个分界左右部分的值,再循环调用在其左右部分就可以实现该功能,非常重要的一点是在求出这个值时,我们要判断后面的部分是否满足有序二叉树的法则因此要加一个循环


总结: 首先就是递归亏看作一个循环,因此我们需要有一个循环标志,帮助跳出循环,防止出现死循环,这是最重要的,然后就是在二叉树中的遍历出来的数据组成的数组,都是具有一定规律的我们根据这层规律便可,判断是否是二叉树的某种遍历.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值