• 二叉搜索树的后序遍历序列-剑指Offer


    二叉搜索树的后序遍历序列

    题目描述

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

    思路

    1. 后序遍历:左-->右-->根节点
    2. 二叉搜索树中,左子树的节点小于根节点,右子树的节点大于根节点
    3. 递归调用,根据大小区别左右子树,若在右子树中发现小于根节点的节点,就不是后续遍历序列
    4. 举一反三:如果要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根节点,再基于根节点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归的处理这两个子序列

    代码

    public class Solution {
        public boolean VerifySquenceOfBST(int [] sequence) {
            if (sequence == null || sequence.length == 0) {
            	return false;
            }
            return verify(sequence, 0, sequence.length - 1);
            
        }
    	public boolean verify(int[] data, int start, int end) {
    		if (data == null || data.length == 0) {
    			return false;
    		}
        // 二叉搜索树中左子树的结点小于根结点
    		int i = start;
    		for (; i < end; i++) {
    			if (data[i] > data[end]) {
    				break;
    			}
    		}
        // 二叉搜索树中右子树的结点大于根结点
    		int j = i;
    		for (; j < end; j++) {
    			if (data[j] < data[end]) {
    				return false;
    			}
    		}
        // 判断左子树是不是二叉搜索树
    		boolean left = true;
    		if (i - start > 0) {
    			left = verify(data, start, i - 1);
    		}
        // 判断右子树是不是二叉搜索树
    		boolean right = true;
    		if (i < end) {
    			right = verify(data, i, end - 1);
    			
    		}
    		return (left && right);
    	}
    }
  • 相关阅读:
    Foundation框架
    OC中四种遍历方式
    OC中NSLog函数输出格式罗列
    字典NSDictionary和NSMutableDictionary的使用
    增加自己的作图能力
    使用forin循环时的注意事项
    固定資産管理
    SAPの販売管理で、価格設定をするまでの関連カスタマイズ画面
    【販売管理】荷印(ケースマーク)の記載内容および記載方法
    購買(MM)用語と意味の一覧
  • 原文地址:https://www.cnblogs.com/rosending/p/5625035.html
Copyright © 2020-2023  润新知