二叉树
凌空的桨
https://github.com/marsmarcin/
展开
-
树3——二叉树的先序遍历
二叉树的先序非递归遍历二叉树这是同济大学的考研试题。算法实现:从二叉树的根结点开始,访问根结点,然后将根结点的指针入栈,重复执行以下步骤:①如果该结点的左孩子结点存在,访问左孩子结点,则将左孩子结点指针入栈。重复执行操作直到结点的左孩子不存在;②将栈顶的元素(指针)出栈,如果该指针指向的右孩子结点存在,则将当前指针指向右孩子结点。重复执行以上两个步骤,直到栈空为止。如图所示的先序遍历...原创 2019-03-29 15:16:11 · 394 阅读 · 0 评论 -
树4——二叉树的层序遍历
这是西北大学的考研题。算法思想:定义一个队列queue,从二叉树的根结点开始,依次将每一层指向结点的指针入队。然后将队头元素出队,并输出该指针指向的结点值,如果该结点的左、右孩子不空,则将左右孩子结点的指针入队。重复执行以上操作,直到队空为止。最后得到的序列就是二叉树的层次输出序列。code:#include <stdio.h>#include <malloc.h&...原创 2019-03-29 16:30:51 · 242 阅读 · 0 评论 -
树6——由中序和后序序列构造二叉树
二叉树这是西北大学考研试题。我们知道,由先序序列和中序序列可以唯一地确定一棵二叉树,同样,由中序序列和后序序列也可以唯一地确定一棵二叉树。先来分析中序序列和后序序列有什么特点。根据二叉树遍历的递归定义,二叉树的后序遍历是先后序遍历左子树,然后后序遍历右子树,最后访问根结点。因此,在后序遍历的过程中,根结点位于后序序列的最后。在二叉树的中序遍历过程中,先中序遍历左子树,然后是根结点,左后遍历右子...原创 2019-03-31 20:37:39 · 10515 阅读 · 0 评论 -
树7——交换二叉树的左右子树
交换二叉树的左右子树二叉树编写算法,要求实现以下功能:(1)写一个建立二叉树的算法,要求二叉树按照二叉链表存储;(2)已知二叉树用二叉链表存储,要求写出算法,实现将该二叉树左右子树交换。这是西北大学考研试题。例如,一颗二叉树在左右子树交换前后的情况如下图所示。这是西北大学考研试题。本题考查二叉树的建立算法思想和左右子树交换算法思想。左右子树交换可用递归实现,类似二叉树的先序...原创 2019-03-31 21:19:43 · 12593 阅读 · 2 评论 -
树9——求二叉树的结点个数
求二叉树的结点个数二叉树已知二叉树采用二叉链表存储,要求编写算法,完成计算二叉树中度为0和度为1的结点数目。这是西北大学考研题。求二叉树中度为0的结点个数即求叶子结点的个数,递归定义为:当二叉树为空时,叶子结点个数为0。当二叉树只有一个根结点时,根结点就是叶子结点,叶子结点个数为1。其他情况下,计算左子树与右子树中叶子结点的和。求二叉树中度为1的结点个数定义如下:当二...原创 2019-04-02 19:43:03 · 3428 阅读 · 0 评论 -
树10——求二叉树的高度和宽度
二叉树二叉树采用二叉链表存储。(1)编写计算整个二叉树高度的算法。(2)编写计算二叉树最宽的算法。二叉树的最大宽度是指二叉树左右层中结点个数的最大值。这是西北大学考研试题。二叉树的高度递归定义为:当二叉树为空时,其深度为0。当二叉树只有根结点时,即结点的左、右子树为空,二叉树的深度为1。其他情况下,二叉树的左、右子树高度的最大值再加1(根结点)就是二叉树的高度。求二叉树的最大...原创 2019-04-02 20:38:47 · 3014 阅读 · 0 评论 -
树11——求根结点到任一结点之间的路径
树11——求根结点到任一结点之间的路径二叉树已知一棵二叉树用二叉树用二叉链表存储,t指向根结点,p指向树中任一结点,要求编写算法,输出从t到p之间路径上的结点。这是南京航空航天大学考研题,主要考查二叉树的后序遍历。由于后序遍历二叉树的过程中,访问到r所指结点时,此时栈中所有结点均为r所指的祖先,由这些祖先便构成了一条从根结点到r所指结点之间的路径,故可采用后序遍历。code:#...原创 2019-04-03 18:26:02 · 4324 阅读 · 1 评论