本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!
第29道问题 剑指offer 33为一道简单题
题目:
力扣https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/
1.自己思考
二叉树的后序遍历
后序遍历的顺序:左节点、右节点、根节点。每次都是最右侧为根节点。
参考题解做的:首先要明白一点,二叉搜索树的定义:左节点小于根节点小于有右节点。
采用递归来做,分治的思想:将树分成两半,一点点细分,直至最后。
class Solution {
public boolean verifyPostorder(int[] postorder) {
int m = postorder.length;
return dd(postorder,0,m-1); //这里的核心思想就是找到这个跟节点的位置
}
public boolean dd(int[] postorder,int i,int j){ //假设最右侧为根节点
if(i>=j) return true; ///此刻搜索到最后了,可以得到结果。
int p=i;
while(postorder[p] < postorder[j]){ //[i k p j] k是左节点跟的位置,也就是下一次分割的点
p++;
}
int k=p; //第一次的分割点
while(postorder[p]>postorder[j]){ //这里面注意根节点最大
p++;
}
return p==j && dd(postorder,i,k-1) && dd(postorder,k,j-1); //去掉了根节点。
}
}
总结:
分析:
1.二叉搜索树的特点,需要注意。
2.后序遍历的顺序。