精华内容
下载资源
问答
  • 数据结构之判断子树

    2019-04-25 19:41:48
    题目:给定一个树,判断另一个树是否是该树的子树,要求:约定空树不是任意一个树的子结构。 思路:依次遍历给定的树的每个节点(A),比较被求的节点(B)是否是该节点(A)以下的部分的子结构。如果是,直接返回...

    题目:给定一个树,判断另一个树是否是该树的子树,要求:约定空树不是任意一个树的子结构。

    思路:依次遍历给定的树的每个节点(A),比较被求的节点(B)是否是该节点(A)以下的部分的子结构。如果是,直接返回true,如果不是,则再次将A节点的左节点和节点B比较,将A节点的右节点和B节点进行比较,取两者的并集。而比较每个节点(A)是否是节点(B)的父结构的方法是比较每个节点的值是否相等,如果相等,则再比较各自的子节点。当然要注意边界条件,例如当B节点的子节点都为空的时候,依然是能够满足条件的。

    源码:

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        
    	public boolean HasSubtree(TreeNode root1,TreeNode root2)
    	 {
    		if(root1==null||root2==null)
    			return false;
    		if(compare(root1, root2))
    			return true;
    		else
    		{
    			return compare(root1.left, root2)||compare(root1.right, root2);
    		}
    	 }
    	 
    	 public boolean compare(TreeNode node1,TreeNode node2)
    	 {
    		 if(node1==null&&node2!=null)
    			 return false;
    		if(node2==null)
    			return true;
    		if(node1.val!=node2.val)
    			return false;
    		return compare(node1.left, node2.left)&&compare(node1.right, node2.right);
    		
    	
    	 }
    	
    	
    }

     

    展开全文
  • 交换左右子树算法 #include<stdio.h> #include<bits/stdc++.h> typedef char TElemType; typedef int status; typedef struct BiNode { TElemType data; struct BiNode *lchild; struct BiNode *...

    递归——层次遍历—交换左右子树算法

    思路:
    与先序递归遍历类似
    1如果有子树,交换这个节点的左右子树(和交换两个变量的值一样)
    2再递归这个节点的左子树,右子树;

    #include<stdio.h>
    #include<bits/stdc++.h> 
    typedef char TElemType;
    typedef int status; 
    typedef struct BiNode
    {
    	TElemType data;
    	struct BiNode *lchild;
    	struct BiNode *rchild;
    }BiNode,*BiTree;
    void CreateBiTree(BiTree &T)//¶þ²æÊ÷µÄÏÈÐò´´½¨ 
    {
    	TElemType ch;
    	scanf("%c",&ch);
    	if(ch=='#')
    		T=NULL;
    	else 
    	{
    		T=(BiNode*)malloc(sizeof(BiNode));
    		if(!T)
    			exit(-1);
    		T->data=ch;
    		CreateBiTree(T->lchild);
    		CreateBiTree(T->rchild);
    	}
    }
    
    void Exchange_lchild_rchild(BiTree &T)//½»»»×óÓÒº¢×Ó½áµã 
    {
    	if(T!=NULL)	
    	if(T->lchild!=NULL||T->rchild!=NULL)
    		{
    			BiTree temp;
    			temp=T->lchild;
    			T->lchild=T->rchild;
    			T->rchild=temp;
    	Exchange_lchild_rchild(T->lchild);
    	Exchange_lchild_rchild(T->rchild);
    		}
    	
     }
     int BiTree_height1(BiTree T)//ÇóÊ÷µÄÉî¶ÈËã·¨1 
    {
    	if(T==NULL)
    		return 0;
    	else
    	{
    		if(BiTree_height1(T->lchild)>BiTree_height1(T->rchild))
    				return 1+BiTree_height1(T->lchild);
    		else
    				return 1+BiTree_height1(T->rchild);
    	
    	}
    	
    	
    } 
    void printNodeAtLevel(BiTree T,int level)  
    {  
        if(T==NULL||level<0)  
            return;  
      
        if(level==0)  
        {  
        printf("%c ",T->data);
    	return;  
        }  
      
        // ×ó×ÓÊ÷µÄ level - 1 ¼¶  
        printNodeAtLevel(T->lchild,level-1);  
      
        // ÓÒ×ÓÊ÷µÄ level - 1 ¼¶  
        printNodeAtLevel(T->rchild,level-1);  
    }
     
    void levelOrder(const BiTree T)
    {
    	if(T==NULL)
    		return;
    	int totalLevel = BiTree_height1(T);
    	for(int i = 0; i< totalLevel; i++)
    	{
    		printNodeAtLevel(T, i);
    		printf("\n");//´òÓ¡ÍêÒ»²ã£¬»»ÐÐ
    	}
    } 
     int main()
     {
     	BiTree T;
    	printf("´´½¨Ê÷ÊäÈëÊ÷TµÄÏÈÐòÐòÁÐ(ÆäÖÐʹÓÃ#´ú±í¿Õ½Úµã)\n");
    	CreateBiTree(T);
    	levelOrder(T);
    	
    	printf("½»»»Ê÷×óÓÒ×ÓÊ÷Ëã·¨\n");
    	Exchange_lchild_rchild(T);
    	
    	 levelOrder(T);
    	
    	
      } 
    
    
    展开全文
  • 数据结构练习:完全二叉树的子树 题目描述: 对一棵完全二叉树,采用自上而下、自左往右的方式从1开始编号,我们已知这个二叉树的最后一个结点是n,现在的问题是结点m所在的子树一共包括多少个结点? 输入格式 输入...

    数据结构练习:完全二叉树的子树

    题目描述

    对一棵完全二叉树,采用自上而下、自左往右的方式从1开始编号,我们已知这个二叉树的最后一个结点是n,现在的问题是结点m所在的子树一共包括多少个结点?
    输入格式
    输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。0 0表示输入结束。
    输出格式
    对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。
    样例输入
    3 12
    0 0
    样例输出
    4

    和网上大部分思路都差不多,利用完全二叉树左右子树和根节点之间的关系,我用了队列让过程更清晰

    #include<stdio.h>
    #include<iostream>
    #include<queue>
    using namespace std;
    int num,num1,num2;
    int cont=0;
    queue<int>data;
    int main(){
        int m,n;
        while (cin>>m>>n)
        {
            cont=0;
            if (m==0&&n==0)//如果读入0 0就结束
            {
                break;
            }
            data.push(m);cont++;
            while (!data.empty())
            {
                num=data.front();
                num1=2*num;
                num2=2*num+1;
                data.pop();
                if (num1<=n)//如果数据合法就入队列
                {
                    data.push(num1);
                    cont++;
                }
                if (num2<=n)
                {
                    data.push(num2);
                    cont++;
                }
                
            }
    
            printf("%d\n",cont);               
        }
        
    }
    
    展开全文
  • 这是数据结构的练习,利用c++语言编写,进行二叉树的左右子树交换,代码简洁但很实用
  • 递归算法——交换二叉树的左右子树:  通过后续遍历实现: 完成遍历之后进行交换 void SwapsSubTree(BinaryTree *BT) { SwapsSubTree(BT->left); SwapsSubTree(BT->right); BinaryTree temp = BT->left;...

    递归算法——交换二叉树的左右子树:

      通过后续遍历实现:

    完成遍历之后进行交换

    void SwapsSubTree(BinaryTree *BT)
    {    
      SwapsSubTree(BT
    ->left);
      SwapsSubTree(BT
    ->right);
      BinaryTree temp = BT->left;
      BT
    ->left = BT->right;
      BT
    ->right = temp;
    }
    展开全文
  • 数据结构 互换二叉树中所有结点的左右子树 C
  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 3 / \ 4 5 / \ 1...
  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 3 / \ ...
  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 3 / \ 4 5 / \ ...
  • 采用递归算法实现,想要交换 t 的左右子树,首先交换 t 的左子树的左右子树,再交换 t 的右子树的左右子树,最后交换 t 的左右子树,结点为空是边界条件。总的运行情况就是先遍历到树的边缘,然后从下往上交换,直至...
  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 3 / \ 4 5 / \ 1 2 ...
  • 二叉树结点的数据域值为不等于0的整数。每次删除操作是在上一次删除操作后剩下的二叉树上执行。 输入格式: 输入第1行为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列,其中空指针信息用0表示。例如1 5 8 ...
  • 交换二叉树的左右子树 #include<stdio.h> #include<stdlib.h> #include<queue> #include <iostream> #define MAXSIZE 10010 #define ElemType int using namespace std; typedef struct ...
  • 递归实现,直接放代码,有兴趣的可以看我后面的详细解析! //将树B的所有节点的左,右子树进行交换 void Swap(BiTree &T){ BiTree temp; if(T){ Swap(T->lchild); Swap(T->...r...
  • 数据结构篇:二叉树(四:交换左右子树

    万次阅读 多人点赞 2018-11-28 17:48:41
    如果结点不为空,就交换其左右子树,而待交换的左右子树,我们不需要关心是否为空。 void Tree::ExChangeTree(BiTree *T) { BiTree *temp = new BiTree; if (T) { temp = T-&gt;rchild; T-&gt;...
  • //二叉树数据结构 struct node { DataType info ; //存放结点数据 struct node *lchild , *rchild ; //指向左右孩子的指针 }; typedef struct node *BiTree ; /*创建二叉树 函数名:createBiTree 参数:无 返回值:...
  • 为x的结点为根的子树的深度。 要求实现下列函数: int Depthx(BiTree T, TElemType x); /* 求二叉树中以值为x的结点为根的子树深度 */ 二叉链表类型定义: typedef struct BiTNode {  TElemType data;  ...
  • 数据结构复习(交换左右子树

    千次阅读 2012-05-03 14:54:35
    编写递归算法,将二叉树中所有结点的 ... //先序递归左右子树  Exchange(bt->lchild);  Exchange(bt->rchild);  }  else  return;  } //注:不能使用中序遍历递归法去解决这个问题
  • 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 bool func(struct TreeNode* p, struct ...
  • 不知道为什么没能直接做出来 纠结的地方在于 关键就是 去判断根节点的左子树与右子树是否对称 就是判断左子树的左边和右子树的右边的判断 直接 递归 istrue(l.left,r.right) 就是走一层节点的左节点的子树左与右节点...
  • 删除结点值为x的子树 方法一递归:
  • **算法思想:**递归交换二叉树左右子树可以采取先序,中序,后序,遍历的思想,划分子问题对其求解 代码: void Swap(BiTree *&right,BiTree *&left){ BiTree *temp=right; right=left; left=temp; } ...
  • 原文地址:Check if a binary tree is subtree of another binary tree | Set 1已知两个二叉树,看一下第一个树是不是第二个树的子树。一个树T的子树是树S,这个树由是T中的一个节点及其它的下属节点组成的。子树...
  • 题目链接:http://bailian.openjudge.cn/practice/2788 2788:二叉树 总时间限制: 3000ms 内存限制: ...现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,...
  • 出去面试、被问到计算机数据结构和算法的问题,尴了个尬,听不懂,虽说自己是前端开发,平时算法的问题还是考虑的少点了,自己总结吧~多沉淀点~什么是树?树是一种数据结构,它是由n(n&gt;=1)个有限结点组成一...
  • 我先找与pattern根节点相同的数据元素,然后用equals判断下面的子树是否相等 equals函数: template bool BinaryTree<T>::equals(BinaryNode* n, BinaryNode* t) { if(n==NULL&&t==NULL) return 1; if(n!=NULL&&t!=...
  • 原文地址:Check if a binary tree is subtree of another binary tree | Set 2已知两个二叉树,看一下第一个树是不是第二个树的子树。一个树T的子树是树S,这个树由是T中的一个节点及其它的下属节点组成的。子树...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,970
精华内容 4,388
关键字:

数据结构子树

数据结构 订阅