Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from t…
(LeetCode 160)Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For example, the…
(LeetCode 141/142)Linked List Cycle
1、Given a linked list, determine if it has a cycle in it. 2、Given a linked list, return the node where the cyc…
(链表)反转链表Reverse List
逆转链表是简单而又简单的链表问题,其问题的方法之一可以设置三个指针,一个指向当前结点,一个指向前驱结点,一个指向后继指针 代码如下: class Solution { public: ListNode* ReverseL…
(算法)是否为二叉查找树的后序遍历数组
题目: 给定一数组,判断它是否为二叉查找树的后序遍历数组 思路: 想想,二叉查找数树的特点,任意根结点大于左子树的所有值,而小于右子树的所有值; 再想想,后序遍历的特点,先遍历左子树,再遍历右子树,最后是根结点; 因此很…
(算法)构造MaxTree
题目: 给定一个没有重复元素的数组A,定义A上的MaxTree如下:MaxTree的根节点为A中最大的数,根节点的左子树为数组中最大数左边部分的MaxTree,右子树为数组中最大数右边部分的MaxTree。请根据给定的数…
(算法)二叉树中两个结点的最近公共父结点
题目: 二叉树中两个结点的最近公共父结点 二叉树结点的定义如下: struct TreeNode{ int val; TreeNode *left; TreeNode *right; }; 思路: 前面在剑指…
(剑指Offer)面试题61:按之字形顺序打印二叉树
题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路: 按照广度优先遍历来遍历二叉树,但是需要按照之字形来打印,意…
(剑指Offer)面试题59:对称的二叉树
题目: 请实现一个函数,用来判断一颗二叉树是不是对称的。 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路: 对于一棵二叉树,从根结点开始遍历, 如果左右子结点有一个为NULL,那么肯定不是对称二叉树…
(剑指Offer)面试题60:把二叉树打印成多行
题目: 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路: 很明显,采用广度优先遍历来解决,但因为需要按行输出,所以需要判断每一层的开始和结束,因此需要两个变量,一个表示当前层尚未打印的结点数,一个…
(算法)二叉树的第m层第k个节点
题目: 给定以下二叉树: struct node { node *left, *right; int value; }; 要…
(剑指Offer)面试题58:二叉树的下一个结点
题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 考虑中序遍历的过程, 如果当前结点存在右子节点,那么当前结点的下一个…