首页 > 编程语言 >挑战数据结构和算法面试题——二叉搜索树的后序遍历

挑战数据结构和算法面试题——二叉搜索树的后序遍历

时间:2023-06-14 19:31:49浏览次数:42  
标签:面试题 遍历 end int 二叉 start 二叉树 return



挑战数据结构和算法面试题——二叉搜索树的后序遍历_二叉树

分析:

根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是具有一下特性的二叉树:

  • 若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值;
  • 若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值;
  • 它的左右子树又分别是二叉查找树。

结合二叉树的后序遍历,则初始序列的最后一位为树的根节点。

方法:

bool judge_is_search_tree(int *a, int start, int end) {
  if (start == end) return true;
  if (start > end) return false;

  int root = a[end - 1];
  int i = start;
  while (i < end-1 && a[i] < root) i++;
  int pos = i;
  while (i < end-1) {
    if (a[i] < root) return false;
    i++;
  }

  bool left = judge_is_search_tree(a, 0, pos);
  bool right = judge_is_search_tree(a, pos, end-1);

  return left&&right;
}


标签:面试题,遍历,end,int,二叉,start,二叉树,return
From: https://blog.51cto.com/u_16161414/6480228

相关文章

  • 【数据结构和算法面试题】左旋转字符串
    问题分析:本题是常见的旋转字符串的问题,解决的方法是两步旋转的方法:方法:voiddo_reverse(char*p_start,char*p_end){ if(NULL==p_start||NULL==p_end||p_start>p_end)return; chartmp; while(p_start<p_end){ tmp=*p_start; *p_start=*p_end; *p_end......
  • 【数据结构与算法面试题】子数组的最大和
    题目来源“数据结构与算法面试题80道”。问题分析:在数组的每一个位置处保存当前的最大值,当前的最大值组成为:解决方案:intget_max_subarray(int*a,intlength,bool&is_array_ok){ if(NULL==a||length<=0){ is_array_ok=false; return0; } int*p_h_a=(int*......
  • 数据结构和算法——二叉排序树
    一、二叉排序树对于无序的序列“62,58,88,47,73,99,35,51,93,29,37,49,56,36,48,50”,是否存在一种高效的查找方案,使得能够快速判断在序列中是否存在指定的数值?二叉排序树是一种简单,高效的数据结构。二叉排序树,又称为二叉查找树。二叉排序树或者是一棵空树,或者是具有以下性质的二叉树:若其左子树不为......
  • 挑战数据结构和算法面试题——最大差值
    题目来自伯乐在线,欢迎有不同答案的同学来一起讨论。分析:基本方法是遍历数组,找到当前值前面所有数组元素的最小值。方法:intget_max_distance(int*a,constintn){intmax_distance=0;//纪录最大距离if(n==0)returnmax_distance;intmin=a[0];//纪录最小的......
  • 【数据结构与算法面试题】求和
    题目来源“数据结构与算法面试题80道”。问题分析:可以使用类的构造方法,在类的每次实例化对象时都会调用构造方法,那么只需要实例化n个对象,就会调用n次构造方法,这就模拟了循环的过程,此时,只需要有一个全局变量记录累加的值即可。方法:#include<stdio.h>classcalnum{ public: cal......
  • 微软亚洲工程院面试题:寻找两个二叉树节点的最近祖先
    给定一颗二叉树,并指定二叉树中任意两个节点,要求找出这两个节点在二叉树中的最近祖先,假定二叉树每个节点都有一个指向其父节点的指针,图中没有画出来,要求算法的空间复杂度必须是O(1),时间复杂度为O(h)。例如给定下面二叉树:如果指定的两个节点是401和257,那么他们的最近祖先就是节点1......
  • 算法面试:根据前序遍历结果序列和中序遍历结果序列重构二叉树
    对不同结构的二叉树进行前序,后序或中序遍历时,得到的结果可以是相同的,例如:上面三种结构的二叉树在进行前序遍历时,得到的序列都是:{3,4,5},但如果给定两种遍历序列,例如再加上中序遍历序列:{4,3,5},那么二叉树的结构就可以唯一确定了,满足这两种遍历序列的二叉树只能是中间那颗二叉树。于......
  • 算法面试题:逆时针打印二叉树外围边缘
    给定一颗二叉树如下:要求把二叉树的外边缘按照逆时针的方式打印出来,也就是你需要打印出以下节点:314,6,271,28,0,17,641,257,29,278,7整个二叉树的外边缘分三部分,第一部分是最左边缘,也就是节点314,6,271,28。第二部分是底边节点,他们分别是0,17,641,257,29。第三部分是右边缘,他们分......
  • 《数据结构与算法》之二叉树(补充树)
    一.树结构之二叉树操作二叉树的查找二叉搜索树,也称二叉排序树或二叉查找树二叉搜索树:一棵二叉树,可以为空,如果不为空,应该满足以下性质:非空左子树的所有结点小于其根结点的键值非空右子树的所有结点大于其根结点的键值左右子树都是二叉搜索树对于二叉树的查找,其实沿用的是......
  • 杭州吉利面试题___整理汇总
    吉利面试======================================吉利面试三面    lyc  2023年6月13日1、自动测试经验有多久?==4左右年2、你用什么语言做的自动化? python3、你做过那些自动 化? ui自动化和接口自动化4、问下你python中去重有几种方法?五种,具体(set  ,if not、 conut==1......