23_____二叉搜索树的后序遍历
知识摘要:
1.二叉搜索树(又叫:二叉排序树,二叉查找树):
遵循: Tree.left.val<Tree.val<Tree.right.val. 所以它的中序遍历一定是一个有序列。
2.其他一些树:
满二叉树:从上往下,除了叶子结点外,其他结点的左右子节点都存在。
完全二叉树:比满二叉树少几个叶子结点,叶子结点从左向右依次放置。
平衡二叉树:它的左右子树高度差的绝对值不大于1,且它的左右子树也是平衡二叉树。
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:

{5, 7, 6, 9, 11, 10, 8}就是以上搜索二叉树的后序遍历结果。 通过观察可以发现:数组中最后一个元素【8】就是该搜索二叉树的根结点,根结点之前的元素,若小于根结点就是左子树,若大于根结点就是右子树。然后继续采用递归进行计算。
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0){ return false; } return doMethod(sequence,0,sequence.length-1); } public boolean doMethod(int[]sequence,int start,int end){ if(start>=end){ //递归结束的条件 return true; //结果为true } //左子树的所有元素都比根结点小 此时根节点是sequence[end] int i=0; //记录左子树的位置 for(;i<end;i++){ if(sequence[i]>sequence[end]){ break; } } //左子树结束 看右子树 for(int j=i;j<end;j++){ if(sequence[j]<sequence[end]){ return false; } } boolean left=doMethod(sequence,start,i-1); boolean right=doMethod(sequence,i,end-1); //根节点往后移 return left&&right; } }
总结:二叉树的问题,一般先找根节点 在找到左右子树的分隔点,然后采用递归的方法进行处理。

浙公网安备 33010602011771号