zoukankan      html  css  js  c++  java
  • 二叉树基本算法

    二叉树的存储结构(C++

    遍历:先序遍历,中序遍历,后序遍历

    附上代码://二叉树的存储和遍历,创建二叉树,后序的直接加上函数和算法

    #include<iostream>

    usingnamespace std;

    typedefstruct Node{

            char data;

            struct Node *lchild,*rchild;

    }*Bitree;

    //创建二叉树

    voidCreatBtree(Bitree &T)

    {

            //先序次序输入二叉树节点的值

            char ch;

            cin>>ch;

            if(ch=='#')

            {

                     T = NULL ;//树的值为空,用于返回上一层,递归结束点。

             }

             else{

                   T=new Node;

                   T->data = ch ;

                   //递归

                       CreatBtree(T->lchild);

                       CreatBtree(T->rchild);

             }

           

     }

     //遍历二叉树

    voidTravel(Bitree T)

    {

            if(T)

            {

                     cout<<T->data;

                     Travel(T->lchild);

                     Travel(T->rchild);

            }

     }

    int main(void)

    {

            Bitree T;

            CreatBtree(T);

            /*字符的输入 ABC##DE#G##F###*/

            Travel(T);

            return 0;

     }

    #代表值为NULL,返回上一层,撸多了没用,看图说话


     

    算法:复制二叉树,计算二叉树的深度,统计二叉树节点的个数

    //复制二叉树;

     void CopyTree(Bitree T , Bitree &T1)

     {

           if(T== NULL)

           {

                    T1= NULL;

                    return;

             }

             else{

                   T1 =new Node;

                   T1->data = T->data;

                   //递归

                   CopyTree(T->lchild,T1->lchild);

                   CopyTree(T->rchild,T1->rchild);

             }

     }

     

    //深度计算层数//5

    intDepth(Bitree T){

           intm,n;

           if(T==NULL)

           {

                    return0;

             }

           else{

                    m=  Depth(T->lchild)+1;

                    n=  Depth(T->rchild)+1;

                    if(m>=n)

                    {

                      return m;

             }

             else{

                   return n;

             }

     }

    }

    //统计二叉树节点的个数

    intCountTree(Bitree T){

            if(T == NULL)

            {

                    return0;

            }

            else{

                     return CountTree(T->lchild)+CountTree(T->rchild)+1;

            }

    }

     

    //对于递归的理解,二叉树本身递归情况的分类就是空树和一个单独的节点,每一个节点,递归就是子树,我们只需要找到空树与一个节点的关系就可以很正确的理解递归。

           

    #include<iostream>
    using namespace std;
    typedef struct Node{
    	char data;
    	struct Node *lchild,*rchild;
    }*Bitree;
    //创建二叉树 
    void CreatBtree(Bitree &T)
    {
    	//先序次序输入二叉树节点的值
    	char ch;
    	cin>>ch;
    	if(ch=='#')
    	{
    		T = NULL ;//树的值为空,用于返回上一层,递归结束点。 
    	 } 
    	 else{
    	 	T=new Node;
    	 	T->data = ch ;
    	 	//递归
    		  CreatBtree(T->lchild);
    		  CreatBtree(T->rchild);
    	 } 
    	
     } 
     //遍历二叉树
    void Travel(Bitree T)
    {
    	if(T)
    	{
    		cout<<T->data;
    		Travel(T->lchild);
    		Travel(T->rchild);
    	}
     } 
     //复制二叉树;
     void CopyTree(Bitree T , Bitree &T1)
     {
     	if(T == NULL)
     	{
     		T1 = NULL;
     		return ;
    	 }
    	 else{
    	 	T1 =new Node;
    	 	T1->data = T->data;
    	 	//递归 
    	 	CopyTree(T->lchild,T1->lchild);
    	 	CopyTree(T->rchild,T1->rchild);
    	 }
     }
     //二叉树的深度;
     int Depth(Bitree T){
     	int m,n;
     	if(T==NULL)
     	{
     		return 0;
    	 }
     	else{
     		m =  Depth(T->lchild)+1;
     		n =  Depth(T->rchild)+1;
     		if(m>=n)
     		{
    		 return m; 
    	 }
    	 else{
    	 	return n;
    	 }
     }
    }
    //统计二叉树的节点个数 
    int CountTree(Bitree T){
    	if(T == NULL)
    	{
    		return 0;
    	}
    	else{
    		return  CountTree(T->lchild)+CountTree(T->rchild)+1;
    	}
    } 
    int main(void)
    {
    	Bitree T,T1;
    	CreatBtree(T);
    	/*字符的输入 ABC##DE#G##F###*/
    	Travel(T);
    	cout<<endl;
    	
    	CopyTree(T ,T1);
    	Travel(T1);
    	cout<<endl;
    	cout<<Depth(T);//5
    	cout<<endl;
    	cout<<CountTree(T);
    	return 0;
     } 


  • 相关阅读:
    TensorFlowMNIST数据集逻辑回归处理
    TensorFlow多元线性回归实现
    TensorFlow简单线性回归
    mysql ON DUPLICATE KEY UPDATE
    20200908 morning diary
    LambdaUtil
    数据库SQL自我书写册
    getMyFriendsListFromWeChat()
    MySQL8.*的JSON语法知多少
    Exception in thread "main" java.lang.IllegalArgumentException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token at [Source: UNKNOWN; line: -1, c
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/9062937.html
Copyright © 2011-2022 走看看