已知一颗二叉链表表示二叉树T ,编写函数,判断T是不是为完全二叉树。先

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知一颗二叉链表表示二叉树T ,编写函数,判断T是不是为完全二叉树。先相关的知识,希望对你有一定的参考价值。

已知一颗二叉链表表示二叉树T ,编写函数,判断T是否为完全二叉树。先给出算法思想,再写出程序代码。
不要程序代码。要书面伪代码

参考技术A 问题:判断二叉树是否为完全二叉树。完全二叉树的定义是,前n-1层都是满的,第n层如有空缺,则是缺在右边,即第n层的最右边的节点,它的左边是满的,右边是空的。以3层二叉树为例,以下情况为完全二叉树:[方法一]这个问题的描述已经提示了解法,采用广度优先遍历,从根节点开始,入队列,如果队列不为空,循环。遇到第一个没有左儿子或者右儿子的节点,设置标志位,如果之后再遇到有左/右儿子的节点,那么这不是一颗完全二叉树。这个方法需要遍历整棵树,复杂度为O(N),N为节点的总数。//二叉树结点定义typedefstructNodeintdata;structNode*left;structNode*right;Node;//实现广度遍历需要队列Queuequeue;//第n层最右节点标志boolleftMost=false;boolProcessChild(Node*child)if(child)if(!leftMost)queue.push(child);elsereturnfalse;elseleftMost=true;returntrue;boolIsCompleteBinaryTree(Node*root)//空树也是完全二叉树if(!root)returntrue;//首先根节点入队列queue.push(root);while(!queue.empty())Node*node=queue.pop();//处理左节点if(!ProcessChild(node->left))returnfalse;//处理右节点if(!ProcessChild(node->right))returnfalse;//广度优先遍历完毕,此乃完全二叉树returntrue;[方法二]根据完全二叉树的定义,左边的深度>=右边的深度。从根节点开始,分别沿着最左最右分支下去,找到最左和最右的深度。如果左边比右边深1,再分别检查以左儿子和右儿子为根的两根树。有点递归的感觉了。[Tobecontinued]本回答被提问者和网友采纳

判断一颗二叉树是否为二叉平衡树 python 代码

  输入一颗二叉树,判断这棵树是否为二叉平衡树。首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。因此判断一颗二叉平衡树的关键在于求出左右子树的高度差,而二叉树的高度又是怎么定义的呢?二叉树的高度指的是从根节点到叶子节点所有路径上包含节点个数的最大值。所以我们可以得出,父亲节点的高度与左右子树高度的关系为:父亲节点的高度=max(左子树高度,右子树高度)+1,同时我们知道,叶子节点的高度值为1(或则0,这里定义1或者0对判断结果没有影响),根据这两条规则,我们就可以利用迭代来求出树的高度。从叶子节点开始不断回溯,依次求得左右节点的高度并判断左右节点的高度差,然后继续向上判断,具体过程参见代码。

首先定义二叉树的类

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

然后利用迭代进行判断

#判断平衡二叉树    
    def IsBalanced_Solution(self, pRoot):
        # write code here
        def balanced(root,height=0):
            #叶子节点的高度定义为0
            if not root:
                height=0
                return True,height
            #由根节点向下迭代
            balanceleft,left=balanced(root.left)
            balanceright,right=balanced(root.right)
            #如果左右子树都是平衡二叉树并且高度差不超过1,那么继续向上判断,父亲节点的高度值=max(左,右)+1
            if balanceleft and balanceright:
                if abs(left-right)<=1:
                    height=left+1 if left>right else right+1
                    return True,height
            return False,height
        balance,height=balanced(pRoot)
        return balance

 

以上是关于已知一颗二叉链表表示二叉树T ,编写函数,判断T是不是为完全二叉树。先的主要内容,如果未能解决你的问题,请参考以下文章

用C语言编写程序,创建一个二叉树的二叉链表结构,然后输出从根结点到所有叶子结点的路径。

数据结构算法设计题

以二叉链表为存储结构,写出求二叉树高度和宽度的算法

求数据结构 用键盘输入一个字符串,按照满二叉树的特点生成一颗二叉树。要求用递归方法生成二叉树

数据结构 二叉树 用二叉链链表存储结构 写出删除二叉树所有的叶子节点的算法

设一棵二叉树以二叉链表表示,试以成员函数形式编写有关二叉树的递归算法: