zoukankan      html  css  js  c++  java
  • 树的子结构

    面试题目:输入两颗二叉树A,B,判断B是不是A的子结构;

    #include <iostream>
    #include <stack>
    using namespace std;
    
    typedef struct BinaryTreeNode{
    	int value;
    	BinaryTreeNode * lchild;
    	BinaryTreeNode *rchild;
    }BinaryTreeNode;
    typedef BinaryTreeNode * BiTree;
    
    void CreateBiTreeByLevel(BiTree &t,int Array[],int i,int len)
    {
    	if(Array[i]==0||i > len) return;
    	t = new BinaryTreeNode;
    	t->value = Array[i];
    	t->lchild = NULL;
    	t->rchild = NULL;
    	CreateBiTreeByLevel(t->lchild,Array,2*i,len);
    	CreateBiTreeByLevel(t->rchild,Array,2*i+1,len);
    }
    
    void display(BiTree *t)        //显示树形结构 
    {
    	if(*t!=NULL)
    	{
    		cout<<(*t)->value;
    		if((*t)->lchild!=NULL)
    		{
    			cout<<'(';
    			display(&(*t)->lchild);
    		}
    		if((*t)->rchild!=NULL)
    		{
    			cout<<',';
    			display(&(*t)->rchild);
    			cout<<')';
    		}
    	}
    }
    bool ifTheSameTree(BiTree &t1,BiTree &t2)
    {
    	if (t2 == NULL)return true;//B树为空,肯定是相同的树
    	if(t1 == NULL)return false;
    	if (t1->value!=t2->value)return false;//节点不同,不是
    	else
    	{
    		return ifTheSameTree(t1->lchild,t2->lchild) & ifTheSameTree(t1->rchild,t2->rchild);//左右均为true返回true
    	}
    }
    bool isSubBinTree(BiTree &t1,BiTree &t2)
    {
    	bool result = false;
    	if(t1 != NULL && t2 != NULL)
    	{
    		if (t1->value == t2->value)//根节点相同,就判断A,B树是否一样
    		{
    			result = ifTheSameTree(t1,t2);
    		}
    		if(!result)result = isSubBinTree(t1->lchild,t2);//判断左子树
    		if (!result) result = isSubBinTree(t1->rchild,t2);//判断右子树
    	}
    	return result;
    }
    
    int main()
    {
        BiTree A,B;
        //InitBiTree(&T);
        int a[14] = {0,1,2,3,4,5,6,0,0,0,7,0,8,9};//从下标1开始,0标识没有节点
    	int b[4] = {0,6,8,9};
    	CreateBiTreeByLevel(A,a,1,13);
    	CreateBiTreeByLevel(B,b,1,2);
    	display(&A);
    	display(&B);
    	if(isSubBinTree(A,B))cout<<"B is A subTree";
    	else cout<<"B is Not A subTree";
    	system("pause");
    }
    

    来源:http://blog.csdn.net/xiaobo620/article/details/7957539

  • 相关阅读:
    第一次结对编程作业
    第一次个人编程作业
    软工实践作业(一)
    通往SDN之路:可编程网络的思想史
    week9:Security: Web Security
    week8:Security: Encrypting and Signing
    week7:Technology: Application Protocols
    week6:Technology: Transport Control Protocol (TCP)
    10.消除左递归
    9.DFA最小化,语法分析初步
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3361532.html
Copyright © 2011-2022 走看看