数据结构与算法--二叉树
朗润
这个作者很懒,什么都没留下…
展开
-
求二叉树中两个节点的最近公共祖先节点
求两个节点的公共祖先可以用到上面的:判断一个节点是否在一颗子树中。(1)如果两个节点同时在根节点的右子树中,则最近公共祖先一定在根节点的右子树中。(2)如果两个节点同时在根节点的左子树中,则最近公共祖先一定在根节点的左子树中。(3)如果两个节点一个在根节点的右子树中,一个在根节点的左子树中,则最近公共祖先一定是根节点。当然,要注意的是:可能一个节点pNode1在以另一个节点pNode2原创 2014-08-19 15:24:27 · 1541 阅读 · 0 评论 -
二叉树中相距最远的两个节点之间的距离
递归解法:(1)如果二叉树为空,返回0,同时记录左子树和右子树的深度,都为0(2)如果二叉树不为空,最大距离要么是左子树中的最大距离,要么是右子树中的最大距离,要么是左子树节点中到根节点的最大距离+右子树节点中到根节点的最大距离,同时记录左子树和右子树节点中到根节点的最大距离。原创 2014-08-18 16:45:55 · 1778 阅读 · 0 评论 -
二叉树的深度
分析:这道题本质上还是考查二元树的遍历。题目给出了一种树的深度的定义。当然,我们可以按照这种定义去得到树的所有路径,也就能得到最长路径以及它的长度。只是这种思路用来写程序有点麻烦。我们还可以从另外一个角度来理解树的深度。如果一棵树只有一个结点,它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该原创 2014-08-15 14:51:48 · 254 阅读 · 0 评论 -
二叉树中和为某一值的路径
要输出所有的路径,必须额外用一个栈来保存当前路径信息。当访问到节点A时,节点A的信息要在访问A的左右子树时用到,因而,该信息必须在遍历A的左右子树前加入到栈中,而在遍历完A的左右子树后从栈中移除。 每访问一个节点,就计算当前路径值(可直接利用父节点的路径值),当其等于给定值且当前节点是叶子节点时,就打印路径信息。void FindPath(BT原创 2014-08-16 22:02:10 · 299 阅读 · 0 评论 -
二叉排序树转化为双向链表
一、问题描述输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。二、实现思路在二叉搜索树中,每个结点都有两个分别指向其左、右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值。而在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个原创 2014-08-17 09:20:41 · 563 阅读 · 0 评论 -
二叉排序树的查找、插入、删除、建立
二叉排序树的定义:(1)、如果原创 2014-08-16 10:45:00 · 1350 阅读 · 0 评论 -
二叉树的遍历
包括二叉树的#include#include#include#includeusing std::cin;using std::cout;using std::endl;//using std::stack;using namespace std;typedef struct BTNode{ char data; BT原创 2014-08-15 14:53:27 · 310 阅读 · 0 评论 -
求二叉树的镜像
#include#includeusing namespace std;using std::stack;typedef struct BTNode{ int data; BTNode *lchild; BTNode *rchild;}BTNode;BTNode *Create(){ int ch;原创 2014-08-19 16:40:20 · 305 阅读 · 0 评论 -
判断二叉排序树的后序遍历是否合法
思想:通过根节点将序列划分为左子树序列和右子树序列,他们必须满足的条件是:左子树序列中的所有值小于根节点,右子树中所有值大于根节点,然后递归判断左子树序列和右子树序列。原创 2014-08-19 16:12:06 · 897 阅读 · 0 评论