精华内容
下载资源
问答
  • 使用一个长度为N的数组,1,存储一棵完全二叉树。(二叉树中每个节点最多有两个子树称为左子树和右子树。完全二叉树是除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干节点。在数组中,...

    使用一个长度为N的数组,1<=N<=50,存储一棵完全二叉树。(二叉树中每个节点最多有两个子树称为左子树和右子树。完全二叉树是除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干节点。在数组中,如果以下标1为起始位置,那么每个节点的左儿子是其自己下标乘以2的节点,右儿子是自己下标乘以2加1的节点,即arr[i*2]和arr[i*2+1]是arr[i]的左右儿子。)然后使用左子树优先的深度优先搜索方法搜索一棵完全二叉树中的一个值为X的节点,最终输出其深度优先搜索的过程,如果一棵树中存在值相同的节点,以第一个被搜索到的为准然后结束。

    本题目已给出main函数,需要以递归方式在头文件DFS.h中实现DFS函数,函数没有返回值,整个搜索过程的输出均在DFS函数中实现,函数有4个参数分别是:1、数组arr,2、数组长度N,3、下标位置pos,4、要被搜索的数字X。

    输入:3行输入;第1行输入为长度N;第二行输入N个数字以空格间隔;第三行输入要搜索的数字X。

    输出:深度搜索的过程,每个数字以空格间隔,最后一个数字后没有空格,以换行符“\n”结束。

    Sample:

    input:

    20

    16 73 22 56 86 84 37 50 83 60 18 18 48 44 70 77 52 72 23 95

    18

    output:

    16 73 56 50 77 52 83 72 23 86 60 95 18

    此题不需要建立二叉树,只是一种类似完全二叉树的思想,把每个数组之间构成一个虚拟的链接再进行遍历搜索。

    #include<stdio.h>
    #include<stdlib.h>
    #define max 50
    int flag = 0;
    //结束递归要用全局变量才能一次把所有递归都结束了,只能return只能结束一次递归。
    void DFS(int arr[], int leng, int pos, int x) {
        if (arr[pos] == x && !flag) {
            flag = 1;
            printf("%d\n", arr[pos]);
        }
        if (!flag){
            printf("%d ", arr[pos]);
            if ((pos + 1) * 2 - 1 >= leng) {
                return;
            }
            DFS(arr, leng, (pos + 1) * 2 - 1, x);
            if ((pos + 1) * 2 >= leng) {
                return;
            }
            DFS(arr, leng, (pos + 1) * 2, x);
        }
    }
    int main() {
        int leng = 0;
        int arr[max] = {0};
        int i;
        int X = 0;
        scanf("%d", &leng);
        for (i = 0; i < leng; i++) {
            scanf("%d", &arr[i]);
        }
        scanf("%d", &X);
        DFS(arr, leng, 0, X);
        return 0;
    }
    展开全文
  • 1、完全二叉树与满二叉树的区别: ...在完全二叉树中,具有n个结点的完全二叉树深度为(log2n)+1,其中(log2n)+1是向下取整。 计算完全二叉树深度公式-推导证明: 假设两种极端情况 <1>该树为满二叉树时...

    1、完全二叉树与满二叉树的区别:

    满二叉树:深度为k且有2^k-1个结点的二叉树称为满二叉树。 
    完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。

    2、计算二叉树的深度 : 

    满二叉树的深度为k=log2(n+1)
    在完全二叉树中,具有n个结点的完全二叉树深度为(log2n)+1,其中(log2n)+1是向下取整。 

    计算完全二叉树深度公式-推导证明:
    假设两种极端情况
    <1>该树为满二叉树时,结点n1=2^k-1
    此时k=log2(n1+1)
    
    <2>当该树为满二叉树附加一个结点时,n2=2^(k-1),此时k=log2n2 +1,
    并且log2(n1+1)=log2n2 +1
    对任意结点n的完全二叉树,n2<=n<=n1
    2^(k-1)<=n<=2^k -1
    log2(n+1)<=k<=log2n +1
    则k向下取整log2n +1
    


     

    展开全文
  • 完全二叉树深度

    千次阅读 2019-09-25 20:00:59
    在完全二叉树中,具有n个结点的完全二叉树深度为(log2n)+1,其中(log2n)+1是向下取整。 满二叉树的深度为k=log2(n+1) 证明: 假设两种极端情况 该树为满二叉树时,结点n1=2^k-1 此时k=log2(n1+1) 当该树为满...

    在完全二叉树中,具有n个结点的完全二叉树深度为(log2n)+1,其中(log2n)+1是向下取整。 满二叉树的深度为k=log2(n+1)

    证明:

    假设两种极端情况

    1. 该树为满二叉树时,结点n1=2^k-1

    此时k=log2(n1+1)

    1. 当该树为满二叉树附加一个结点时,n2=2^(k-1),此时k=log2n2 +1,

    并且log2(n1+1)=log2n2 +1

    对任意结点n的完全二叉树,n2<=n<=n1

    2^(k-1)<=n<=2^k -1

    log2(n+1)<=k<=log2n +1

    则k向下取整log2n +1

     

    展开全文
  • 完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。...

    完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

    所以判断完全二叉树须满足两个条件:
    1所有叶子节点处的深度均为二叉树的深度
    2不存在只有右孩子而没有孩子的节点
    求深度即可,主要是递归有点绕
    递归一次,深度加一,返回一次,深度减一

    #include<iostream>
    using namespace std;
    #define  ElemType  char
     struct BiTree {
    	ElemType data;
    	 BiTree* Lchild, * Rchild;
    };
    void createBiTree(BiTree* &T)
    {
    	ElemType temp;
    	temp = getchar();
    	if (temp == '#')
    	{
    		T = NULL;
    	}
    	else
    	{
    		T = new BiTree;
    		T->data = temp;
    		createBiTree(T->Lchild);
    		createBiTree(T->Rchild);
    	}
    }
    void InOrder(BiTree* T)
    {
    	if (T)
    	{
    		InOrder(T->Lchild);
    		cout << T->data;
    		InOrder(T->Rchild);
    	}
    }
    void Deepth(BiTree* T,int& temp, int& n)
    {
    	if (T)
    	{
    		temp++;
    		Deepth(T->Lchild,temp,n);
    		Deepth(T->Rchild,temp,n);
    	}
    	else 
    	{
    		if (temp > n)
    			n = temp;
    		temp--;
    	}
    }
    void IsBest(BiTree* T, int &n, int &temp,bool &temp1)
    {
    	if (T)
    	{
    		temp++;
    		if (T->Lchild == NULL && T->Rchild!=NULL)
    			temp1 = false;
    		IsBest(T->Lchild, temp, n,temp1);
    		IsBest(T->Rchild, temp, n,temp1);
    	}
    	else
    	{
    		if (temp != n)
    			temp1 = false;
    		temp--;
    	}
    }
    int main()
    {
    	BiTree* T;
    	bool temp1=true;
    	T = NULL;
    	int temp, n;
    	temp = 0;
    	n = 0;
    	createBiTree(T);
    	InOrder(T);
    	Deepth(T, temp, n);
    	temp = 0;
    	cout << n;
    	IsBest(T, n, temp,temp1);
    	if (!temp1)
    		cout << "no";
    	else
    		cout << "yes";
    	return 0;
    }
    
    展开全文
  • 如何计算完全二叉树深度

    万次阅读 2017-09-22 19:46:52
    如何计算完全二叉树深度一棵有12个节点的完全二叉树,其深度是()一棵有12个节点的完全二叉树,其深度是() 4 5 3 6 在此之前我想说一下三种二叉树 Full Binary Tree Perfect Binary Tree Complete Binary Tree ...
  • 二叉树深度计算 1、一颗树只有一个节点,它的深度是1; 2、二叉树的根节点只有左子树而没有右子树,那么可以判断,二叉树深度应该是其左子树的深度加1; 3、二叉树的根节点只有右子树而没有左子树,那么可以判断...
  • 给定一棵完全二叉树的根节点...1 找到完全二叉树的最左节点,也就是求左子树的深度 2 找到完全二叉树头节点右子树中的最左节点,记录右子树深度 3 如果两个深度相等,说明头节点左子树是一棵满二叉树,使用公式求...
  • /* 判断完全二叉树,依据定义:任何一个节点(除去叶子节点)有且仅有两个“孩子” */ #include #define MAX_TREE_DEGREE 10 typedef struct BTnode{//以二叉链表作为存储结构  char data;  struct BTnode* ...
  • 判断完全二叉树

    2018-01-03 17:52:51
    深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中的编号为1~n的结点相对应,则这个二叉树为完全二叉树. 满二叉树 深度为k 且有2^k-1个结点的二叉树. 结点的编号约定为:从根结点起从上至...
  • 2.求二叉树深度 3.判断二叉树是否为完全二叉树 预备知识: 叶子:没有左右孩子的结点。 树的深度定义:树中所有节点的层次的最大值称为该树的深度,其中规定根节点的层次为0 其他节点的层次为双亲节点层次...
  • 1)数组只能构建完全二叉树吗?可否使用{1,2,null,1,2,3,...}的形式构建非完全二叉树 部分代码参考自leetcode中的思想 104. 二叉树的最大深度 import java.util.ArrayList; import java.util.List; public ...
  • 深度为N的满二叉树第M层节点数为2(m-1);...满二叉树应是210-1=1023个节点,这里是1001个节点,完全二叉树比满二叉树少在最后一行,少了1023-1001=22个节点,满二叉树最后一行是210-1=512个节点;减去22个缺少节点,...
  • **完全二叉树:**对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点...
  • 前序遍历和后序遍历的代码...二叉树深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大
  • 1.实验目的 熟练掌握二叉树的二叉链表存储结构的C语言实现。掌握二叉树的基本操作-前序、中序、后序遍历二叉树的三种方法。了解非递归遍历过程中“栈”的作用和状态,而且能...(4)编写求二叉树深度的递归算法。 ...
  • 二叉树 深度

    2009-06-12 16:50:00
    5. 2 二叉树  1.二叉树的基本形态:  二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态... (5)完全二叉树——(e)  注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。...
  • 完全二叉树的实现原理 深度优先遍历 层次遍历: 先序遍历:根—>左—>右 中序遍历:左—>根—>右 后序遍历:左—>右—>根 完全二叉树的代码实现 树 树的定义 是一种抽象类型,或是实作...
  • 完全二叉树

    万次阅读 2018-08-23 17:05:07
    完全二叉树叶子只能出现在最下面的二层 最下层的叶子一定集中在左部的连续位置 倒数第二层 若有叶子结点 一定在右部...同样结点的二叉树,完全二叉树深度最小 这是一个完全二叉树 以下都不是完全二叉树  ...
  • 使用一个长度为N的数组,1 本题目已给出main函数,需要以递归方式在头文件DFS.h中实现DFS函数,函数没有返回值,整个搜索过程的输出均在DFS函数中实现,函数有4个参数...输出:深度搜索的过程,每个数字以空格间隔,
  • 完全二叉树 满二叉树

    2020-05-03 23:59:36
    完全二叉树 满二叉树 1.定义 ①满二叉树:除最后一层无任何节点外,每一层上的所有节点都有两...②完全二叉树完全二叉树是效率很高的数据结构,对于深度为K的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中...
  • 若堆的深度【层数】为h,除了最后一层,其上各层 (1~h-1) 的结点数都达到最大个数,并且最后一层所有的结点都连续集中在最左边,这就是完全二叉树。 堆 堆是利用完全二叉树的结构来维护的一组数据。它的实现如下:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,518
精华内容 1,007
关键字:

完全二叉树深度