1 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 2 思路和方法 定义一种遍历算法,先遍历右子结点再遍历左子结点:如对称先序遍历:根结点->右子结点->左子结点:而先序遍历:根结点->左子结点->右子结点:通过比较二叉树的先序遍历和对称先序遍历的序列是否相同来判断二叉树是否对称.注意:因为二叉树的元素可能全部相同,所以将遍历过程中的nullptr也考虑进来. 3 C++核心代码 /* struct Tree…
自己写的 class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == NULL) return NULL; if(pNode->right != NULL){ TreeLinkNode* origin = pNode->right; while(origin->left != NULL) origin = origin->left; return origin; } else{…
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 先上通过的代码: class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) {…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 思路 还是画图分析,不用分析根结点,只需要分析左右子树.可以看出,左右子树刚好是呈镜像的两颗二叉树,所以:对左子树采用(父-左-右)的前序遍历,右子树采用(父-右-左)的前序遍历,遍历时判断两个结点位置的值是否相等即可.(也可以这样理解:左树的左子树等于右树的右子树,左树的右子树…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可以很清晰地得到思路:先前序遍历,对每个结点交换左右子结点. 测试算例 1.功能测试(普通二叉树:左斜树:右斜树:一个结点) 2.特殊测试(根结点为null:) Java代码 //题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. public class MirrorOfBinaryTree { pu…
该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先序.中序.后序.层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 !表示一个结点值的结束(value!). 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树. Go语言实现: type…
该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) Go语言实现: var arrAll [][]int var arrPath []int func findPath(root *TreeNode, target int) [][]int { if root == nil { return arrA…
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5.6.这个链表的倒数第3个结点是值为4的结点. 链表的节点定义如下,这里使用的是C#来定义: public class Node { public int Data { get; set…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. 思路 思路一:数字次数超过一半,则说明:排序之后数组中间的数字一定就是所求的数字. 利用partition()函数获得某一随机数字,其余数字按大小排在该数字的左右.若该…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 思路 题目很简单,主要就是实现对每个字符转化为数字,并进行累加即可.但是有很多特殊情况都需要考虑进去,例如null.空字符串.带有正负号.字符不是数字.溢出等等. 对于非法的特殊输入,返回值为0,还要用一个全局变量进行标记. 写代码时一定要考虑清楚各种测试用例.…