精华内容
下载资源
问答
  • 判断一棵树是否为完全二叉树

    千次阅读 2020-07-02 09:14:25
    一棵二叉树,给定它的根节点root,请设计一个算法判断它是否是完全二叉树 分析 一边对二叉树进行BFS将每一个节点都加入到队列,一边执行下面的判断 当前节点有右孩子,但没有左孩子,直接返回false 当前节点有左...

    题目

    有一棵二叉树,给定它的根节点root,请设计一个算法判断它是否是完全二叉树

    分析

    一边对二叉树进行BFS将每一个节点都加入到队列,一边执行下面的判断

    1. 当前节点有右孩子,但没有左孩子,直接返回false
    2. 当前节点有左孩子没右孩子,那么接下来遇到的所有节点必须是叶子节点

    例如下图所示的情况,当遍历到红色节点后,由于其只有左孩子,没有右孩子,因此实际上认为当前开启了一个状态,这个状态的开启,使得接下来的所有节点必须只能是叶子节点,如果不是,则该二叉树不是完全二叉树。例如,接下来访问到绿色节点,发现该节点不是叶子节点,因此直接返回false

    代码

    public static boolean check(Node head) {
        boolean leaf = false; // 是否开启了状态
        Queue<Node> q = new LinkedList<Node>();
        q.add(head);
        while (!q.isEmpty()) {
            Node cur = q.poll();
            Node l = cur.lchild;
            Node r = cur.rchild;
            if ((leaf && (l != null && r != null)) || (l == null && r != null))
                return false;
            if (l != null)
                q.add(l);
            if (r != null)
                q.add(r);
            else
                leaf = true;
        }
        return true;
    }
    
    展开全文
  • 判断一棵树是否为二叉排序树

    千次阅读 2018-12-27 08:08:40
    怎么样判断一棵树是否为二叉排序树 int justBT(BTNode *p,BTNode *pre) { int p1,p2; if(p==NULL) return 1; else { p1=justBT(p-&gt;lchild,pre); if(p1==0||pre-&gt;data&gt;p-&gt;...

     怎么样判断一棵树是否为二叉排序树

    int justBT(BTNode *p,BTNode *pre)
    {
    	int p1,p2;
    	if(p==NULL)
    		return 1;
    	else
    	{
    		p1=justBT(p->lchild,pre);
    		if(p1==0||pre->data>p->data)
    			return 0;
    		pre=p;
    		p2=justBT(p->rchild,pre);
    		return p2;
    	}
    }

     

    展开全文
  • opengl 做的很漂亮的一棵树,用分形算法实现 含代码
  • 随机生成一棵树

    千次阅读 2019-04-14 20:56:14
    2、当生成的随机数为1,2时找到1,2的父节点分别为FA[1]=1,FA[2]=2,父节点不同进行连接。 3、生成的随机数为1,3,连接1,3这条边。 4、生成的随机数为2,3,不进行连边。 5、生成的随机数为2,4,连边 CODE: ...

    并查集的简单介绍

    1、初始情况四个点的父节点都为本身:FA[1]=1,FA[2]=2…
    在这里插入图片描述
    2、当生成的随机数为1,2时找到1,2的父节点分别为FA[1]=1,FA[2]=2,父节点不同进行连接。

    在这里插入图片tuer描述
    3、生成的随机数为1,3,连接1,3这条边。
    在这里插入图片描述
    4、生成的随机数为2,3,不进行连边。
    5、生成的随机数为2,4,连边在这里插入图片描述

    CODE:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+7;
    int FA[maxn],N;
    
    int union_find(int x)//并查集判环 
    {
    	if(FA[x]==x)return x;
    	else return FA[x]=union_find(FA[x]);//返回时进行赋值查找效率变为:O(1) 
    }
    int main()
    {
    	ofstream ofile;
    	ofile.open("input1.txt");
    	N=10;                     //通过改变N的规模改变数据规模大小 
    	ofile<<N<<'\n';
    	
    	for(int i=1;i<=N;i++)
    	{
    		//随机数的奇偶性决定正负 
    		if(rand()%2){ofile<<rand()%N<<' ';}
    		else ofile<<-rand()%N<<' ';
    	}
    	ofile<<'\n';
    	
    	for(int i=1;i<=N;i++)FA[i]=i;//父节点初始化 
    	int mid=N*700;//边的随机数量应该要多一些,以保证整个图的连通 
    	while(mid--)
    	{
    		int a=rand()%N+1,b=rand()%N+1;
    		int fa=union_find(a),fb=union_find(b);
    		if(fa==fb)continue;//父节点相同时连这条边将成环 
    		else
    		{	
    //		    cout<<"a: "<<a<<" b: "<<b<<'\n';
    //		    cout<<"fa: "<<fa<<" fb: "<<fb<<'\n';
    //这个地方之前写错了 
    			FA[fa]=fb;
    			ofile<<a<<' '<<b<<'\n';//否则连这条边 
    		}
    	}
    }
    
    
    展开全文
  • 题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点。意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 就不是子树...

    题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点。意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 就不是子树了。
    思路:将二叉树序列化,转化为2个字符串,再利用kmp算法或stl中的find()函数即可,若结点为空用#代表data 二树先序序列化为 1_#8_7##9##_ 用"_"表示一个结点结束符
    在这里插入图片描述

    #include <iostream>
    #include <string>
    using namespace std;
    struct btnode {
    	int data;
    	struct btnode* lchild;
    	struct btnode* rchild;
    };
    //创建二叉树
    void create_btree(btnode* &T){
    	T = new btnode;
    	T->lchild = NULL;
    	T->rchild = NULL;
    	int a;
    	cin >> a;
    	if (a == -1) {
    		T = NULL;
    		return;
    	}
    	else {
    		T->data = a;
    		create_btree(T->lchild);
    		create_btree(T->rchild);
    	}
    }
    //二叉树转化为string  中序序列化 也可以先序 后序
    void btree_to_str(const btnode* T, string& s) {
    	if (T) {
    		btree_to_str(T->lchild, s);
    		s += to_string(T->data);
    		s += "_";//每个结点后加 _ 以分割相邻结点 
    		btree_to_str(T->rchild, s);
    	}
    }
    int main()
    {
    	string s1, s2;
    	btnode *T1, *T2;
    	create_btree(T1);
    	create_btree(T2);
    	btree_to_str(T1, s1);
    	btree_to_str(T2, s2);
    
    	cout <<"s1="<< s1<<"     s2="<<s2<<endl;
    	if ( s1.find(s2) != -1) {
    		cout << "是子树";
    	}
    	else {
    		cout << "不是子树";
    	}
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 树的c++实现--建立一棵树

    千次阅读 2019-11-05 21:38:17
    树的c++实现--建立一棵树 在学习二分查找树的时候,在递归的问题上遇到不少的问题,在这里和大家分享一下自己的学习过程 我在学习树的知识的时候,没有把树当做一个类,只把一个结点当做一个类。树的实现都在函数...
  • 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是...
  • 问题:判断一棵树是否为排序二叉树(二叉搜索树) 思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树 程序实现: #include &lt;iostream&gt; #include&lt;limits&...
  • 判断一个无向图G是否为一棵树

    千次阅读 2020-06-03 17:18:31
    bool isTree(Graph &G){ for(int i=1;i<=G.vexnum;i++){ visited[i]=FALSE;...Enum==2*(G.vexnum-1)){ //无向图,边数应为结点数-1的2倍 return true; } else return false; } void DFS(G.
  • ~判断一棵树是否是完全二叉树~

    千次阅读 2017-05-03 20:56:25
    判断一棵树是否是完全二叉树
  • package class_04; import java.util.LinkedList;... * 判断一棵树是否是搜索二叉树 * 判断一棵树是否是完全二叉树 * */ public class Code_07_IsBSTAndCBT { public static class Node { public int v...
  • 思路:判断一个无向图是否是一棵树,只需要判断该图是否是一个包含n个顶点的连通子图且边数为n-1,只要这两个条件都满足,那么就是一棵树。 因此我们可以采用深度遍历,若图连通,那么只要一次深度遍历就可以遍历出...
  • 文章目录题目链接题目描述示例解析代码 题目链接 ...本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 输入1: [3,9,20,null,null,15,7] ...
  • 图11——判断图中是否为一棵树

    千次阅读 2019-06-29 20:46:30
    一个无向图G是一棵树的条件为:G必须是无回路的连通图或n-1条边的连通图,这里我们采用后者作为判断条件。例如下图所示: 上面的无向图就是一棵树,它有6个顶点,5条边。 code: #include<stdlib.h> #...
  • 文章目录如何遍历一棵树1.宽度优先搜索(BFS)2.深度优先搜索(DFS)3.Python编程实现 如何遍历一棵树 有两种通用的遍历树的策略: 1.宽度优先搜索(BFS) 我们按照高度顺序一层一层的访问整棵树,高层次的节点将会...
  • 例如,下图中的两棵树 A 和 B ,由于 A 中有部分子树的结构和 B 是一样的,因此 B 就是 A 的子结构。  1 8  / \ / \  8 7 9 2  / \  9 2  / \  4 7 分析:这是 ...
  • 给定一棵二叉树,判定该二叉树是否是二叉搜索(Binary Search Tree)? 2. 思路 二叉搜索要求: 结点node的左子树所有结点的值都小于node的值。 结点node的右子所有结点的值都大于node的值。 结点node的左右...
  • 如何将一棵树转化成二叉树

    万次阅读 多人点赞 2019-02-21 01:44:59
    从这棵树的根结点开始,从上到下,看每个结点,把你正在看的结点的孩子放在左子树,兄弟放在又子树。 口诀: 1. 将 节点的孩子 放在左子树; 2. 将 节点的兄弟 放在右子树。 关于这个问题,最好的办法就是记住...
  • python教你画一棵树

    千次阅读 2019-02-14 09:52:35
    今天在知乎上找了个用 turtle 画的 python 程序,起来看看。 其实这种程序,主要了解下大概思路即可,有兴趣的可以去熟悉下 turtle 中每个函数的使用方法和作用,我在画玫瑰花那篇文章中也有过一些介绍...
  • 采用孩子兄弟表示法建立一棵树

    千次阅读 2020-05-24 11:22:10
    采用孩子兄弟表示法建立一棵树。 说明:因为孩子兄弟表示法的特点,不好用递归创建,所以利用队列来存放结构体。 注意:当指针作为函数参数时,不能改变实参指针的指向,只能改变实参指针所指向的数据 #include&...
  • 克隆一棵树 【数据结构】

    千次阅读 2018-07-06 16:11:39
    克隆一棵树 树的创建是递归的,那么树的克隆也采用递归的方式 如下为先序遍历的方法克隆一棵树 1 根据树的根节点创建新的根节点 2 根据已知树的左子树递归创建新的左子树 3 根据已知树的右子树递归创建新的右子...
  • 判断一棵树是否为满二叉树

    千次阅读 2016-06-23 16:42:00
    那么,我们要怎么判断一棵树是否为满二叉树呢? 思路:在层序遍历的过程中,找到第一个非满节点(non-full node)。满节点(full-node)指的是同时拥有左右孩子的节点。在找到第一个非满节点之后,剩下的节点不应该有...
  • ①可以统计得到个图是否连通 ②个图中边的个数 代码部分: int visited[MAXNUM]; //主算法入口 bool isTree(Graph& G){ for(i=1;i<G.vexnum;i++) visited[i] = false; //初始化记录已访问顶点的数组 ...
  • 一棵树上的叶子节点个数

    千次阅读 2018-11-07 20:32:36
    def getLeaveNodes(self, root, count): if root is None: return 0 if root.left is None and root.right is None: count += 1 return count l...
  • 一棵树转换为二叉树后,这棵二叉树的形态是( )

    万次阅读 多人点赞 2020-04-29 17:16:21
    一棵树转换为二叉树后,这棵二叉树的形态是( ) A. 唯一的 B. 有多种 C. 有多种,但根节点都没有左孩子 D. 有多种,但根节点都没有右孩子 答案 A 解析 树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,...
  • XGBOOST下一棵树的输入是什么?

    千次阅读 2018-08-10 23:35:25
    最近研究XGBOOST,发现看完大篇理论推导之后根本不知道训练完一棵树后,下一棵树的输入是什么。 我想到了提升树(Boosting Tree),以平方误差损失函数为例,训练完一棵树后,只需要计算训练值和实际值的残差,再对...
  • 一棵树转换为二叉树

    千次阅读 2017-09-01 15:13:18
    如何将一棵树转化为对应的二叉树? 解答: 1. 将 节点的孩子 放在左子树; 2. 将 节点的兄弟 放在右子树。 例题: 答案:     延伸: 任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树。那么树...
  • 思路:对于一棵二叉树,最简单的方法就是中序遍历,看是不是一个递增数列,如果是,则是一棵二叉搜索,如果不是,则不是二叉搜索。在这里用一个lastVisit去记录上一次搜索的节点。这个过程就是先找到最左下角的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 331,502
精华内容 132,600
关键字:

一棵树×2