
树
文章平均质量分 71
day__day__up
每天进步一点点
展开
-
六:二叉树中第k层节点个数与二叉树叶子节点个数
二叉树中第k层节点个数递归解法:(1)如果二叉树为空或者k<1返回0(2)如果二叉树不为空并且k==1,返回1(3)如果二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和二叉树叶子节点个数递归方式(1)如果给定节点pRoot为NULL,则是空树,叶子节点为0,返回0;(2)如果给定节点pRoot左右子树均为NULL,则是叶子节点,且叶子节点数为1,返回1;(3)如果给定节点pRoot左右子树不都为NULL,则不是叶子节点,以pRoot为根节点的子树叶子节点数原创 2015-07-07 23:04:34 · 2044 阅读 · 0 评论 -
三:求二叉树的深度以及判断二叉树是否平衡
求树的深度int TreeDepth(BinaryTreeNode* pRoot) { if (pRoot == NULL) return 0; int nLeftDepth = TreeDepth(pRoot->m_pLeft); int nRightDepth = TreeDepth(pRoot->m_pRight)原创 2015-07-07 13:20:55 · 753 阅读 · 0 评论 -
二:二叉树的递归与非递归遍历
以根结点的访问顺序纷飞前,中,后序1.前序遍历:递归:void PreOrder(BiTree *root){ if(root!=NULL) { coutdata PreOrder(root->lchild); PreOrder(root->rchild); }} 非原创 2015-07-06 16:56:52 · 351 阅读 · 0 评论 -
面试题小结(6)
1. 扑克牌的推理P先生、Q先生都具有足够的推理能力。这天,他们正在接受推理面试。他们知道桌子的抽屉里有如下16张扑克牌:红桃 A、Q、4黑桃 J、8、4、2、7、3草花 K、Q、5、4、6方块 A、5约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什原创 2015-07-11 21:41:42 · 1305 阅读 · 0 评论 -
九:二叉搜索树与双向链表(二叉搜索树转为有序双向链表)
问题描述:输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。 解析:借助二叉树中序遍历,因为中序遍历二叉搜索树的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而更新当前链表的最后一个结点指针。 递归算法:(1)中序遍历。(2)原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点原创 2015-07-10 10:22:37 · 743 阅读 · 0 评论 -
七:重建二叉树(根据先序遍历(或者后序遍历)和中序遍历重建二叉树)
对于一颗二叉树,可以根据先序遍历(或者后序遍历)和中序遍历(树中不含重复的数字)重新还原出二叉树。解析:1. 先序遍历序列的第一个元素必定是根节点,可以由此获取二叉树的根节点。2. 根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在根节点的左子树中,而根节点右边的序列必定在右子树中。由此可以知道先序遍历中左子树以及右子树的起止位置。3. 找到了左右子树前序遍历和中序遍历再用同样的方法分别构建左右子树,典型的递归思想。原创 2015-07-09 17:01:28 · 984 阅读 · 0 评论 -
五:二叉树中和为某一直的路径
当用前序遍历的方式访问到某一节点时,我们把这个节点添加到路径上,并累加该节点的值,如果该节点为叶子节点并且路径中节点值的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前节点不是叶节点,则继续访问它的子节点。当前节点访问结束后,递归函数将自动回到它的父节点。因此我们在函数退出之前要在路径上删除当前节点,并减去当前节点的值,以确保返回父节点时路径刚好是从根节点到父节点的路径。不难看出保存路径的数据结构实际上是一个栈,因为路径要与递归调用状态一致,而递归调用的本质就是一个压栈和出栈的过程。原创 2015-07-07 20:15:39 · 748 阅读 · 0 评论 -
八:二叉搜索树的后序遍历
问题描述:输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。解析:根据后序遍历的定义,如果一个序列是二叉树的后续遍历的结果,那么我们不难得出,序列的最后一个节点必定是二叉树的根节点,除了根节点外,序列中前一部分是二叉树的左子树的节点,后面一部分是二叉树的右子树的节点。同理,左右子树的遍历结果也具有一样的特点。原创 2015-07-09 22:28:13 · 713 阅读 · 0 评论 -
四:二叉树的镜像递归非递归求解
二叉树的镜像递归非递归求解1. 递归求解:先序遍历树的每个结点,若遍历到的结点有子结点,则交换它的两个子结点。2. 非递归求解(借助栈)借助于栈,先交换两棵子树,再求完一棵子树的镜像后在求另一棵子树的镜像(纵向,深度优先)3. 非递归求解(借助队列)借助于队列以用广度优先的顺序遍历一遍实现逐层镜像(横向,广度优先)原创 2015-07-07 14:52:42 · 908 阅读 · 0 评论 -
一:二叉树的性质及创建
二叉树的性质 性质1:在二叉树的第i层上至多有2i-1个结点(i≥1)。(数学归纳法可证)性质2:深度为k的二叉树最多有2k-1个结点(k≥1)。(由性质1,通过等比数列求和可证)性质3:一棵二叉树的叶子结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。证:结点总数n = n0 + n1 + n2。设B为分支总数,因为除根节点外,其余结点都有一个分支进入,所以n =原创 2015-07-06 16:31:45 · 525 阅读 · 0 评论