程序员代码面试指南
Master_Yoda
Named after the name of God,by your hands!
展开
-
用两个栈实现队列
队列是先进先出,栈是先进后出,所以如果想用栈实现队列的话,就可以使用一个栈当作压入栈,压入数据时,只往栈压入数据,记为stackPush,一个栈当作弹出栈,弹出数据时只从这个栈弹出,记作stackPop.但是需要注意以下几点: 如果stackPush要往stackPop中压入数据,必须一次性把stackPush中的数据全部压入 如果stackPop不为空,stackPush绝对不能向stackP...原创 2019-03-04 19:51:17 · 93 阅读 · 0 评论 -
在二叉树中找一个节点的后继节点和前驱节点
首先是后继节点和前驱节点的定义:在二 叉树的中序遍历的序列中, node的下一个节点叫作node的后继节点。 现在有一种新的二叉树节点类型如下: public static class Node { public int value; public Node left; public Node right; public Node parent; public Node(in...原创 2019-04-25 08:31:43 · 699 阅读 · 0 评论 -
通过二叉树的先序和中序遍历序列重构二叉树
一只一棵二叉树的所有节点的值都不相同,给定这棵树的先序和中序遍历序列,重构二叉树 过程如下: 先序数组中最左边的值就是树的头节点值,记为h,并用h生成头节点,记为head,然后在中序数组中找到h,假设位置是i,那么在中序数组中,i左边的数组就是头节点左子树的中序数组,假设长度为l,则左子树的先序数组就是先序数组中h往右长度也为l的数组。 用左子树的先序和中序数组,递归整个过程建立左子树,返回的头...原创 2019-03-25 10:48:39 · 1345 阅读 · 0 评论 -
二叉树的序列化和反序列化(先序遍历和层次遍历)
序列化是指将数据存储到文件中。 先序遍历序列化 public static String serialByPre(Node head) { if (head == null) { return "#!"; } String res = head.value + "!"; res += serialByPre(head.left); res += serialByPre(h...原创 2019-04-25 10:47:29 · 2751 阅读 · 0 评论 -
判断一棵二叉树是否是搜索二叉树和完全二叉树
搜索二叉树是左子树都比当前节点小,右子树都比当前节点大。所以进行判断的时候,我们可以通过中序遍历进行判断,在每次遍历的时候将当前节点和其前驱节点进行比较,如果比它大就说明不是搜索二叉树,递归即可停止。 代码如下: 首先是树节点的定义: public static class Node { public int value; public Node left; public Node r...原创 2019-04-25 15:38:21 · 552 阅读 · 0 评论 -
统记完全二叉树的个数
过程如下: 如果head==null,直接返回0 如果不是空树,就求树的高度,求法是找到树的最左边节点,看能到哪一层。层数记为h 接下来就是具体的逻辑,是通过一个递归函数来实现的,bs(node,l,h),node表示当前节点,l表示node所在的层数,h表示整棵树的层数,是始终不变的。bs(node,l,h)返回值表示以node为头的完全二叉树的节点数,初始时node为头节点head,l为1,...原创 2019-04-25 16:39:25 · 229 阅读 · 0 评论