zoukankan      html  css  js  c++  java
  • 二叉树——复制、计算深度、统计节点数、统计叶子节点数、比较两个树、交换左右子树节点、双序遍历

    void copy(BiTree T,BiTree &NewT){          //复制树
        if(T == NULL){
            NewT = NULL;
            return;
        }else
        {
            NewT = new BiTNode;
            NewT->data = T->data;
            copy(T->lchild,NewT->lchild);
            copy(T->rchild,NewT->rchild);
        }
        
    }
    
    int Depth(BiTree T){               //计算深度
        if(T == NULL) return 0;
        else
        {
            int m = Depth(T->lchild);
            int n = Depth(T->rchild);
            if(m>n) return m+1;
            else return n+1;
        }
    }
    int NodeCount(BiTree T){              //统计节点数
        if(T == NULL) return 0;
        else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
    }
    
    static int leaveCount = 0;
    
    int LeaveNodeCount(BiTree T){              //统计叶子节点数
        if(T == NULL ) return 0;
        else{
            if(T->lchild == NULL&&T->rchild == NULL) return leaveCount++;
            LeaveNodeCount(T->lchild);
            LeaveNodeCount(T->rchild);
        }
    }
    
    int LeaveNodeCount1(BiTree T){              //统计叶子节点数
        if(T == NULL ) return 0;
        else{
            if(T->lchild == NULL && T->rchild == NULL) return 1;
            else
            {
                return LeaveNodeCount(T->lchild)+LeaveNodeCount(T->rchild);
            }
            
        }
    }
    
    int compareTree(BiTree A1,BiTree A2){   //1表示相同,0表示不同  比较两个树
        if(A1 == NULL && A2 == NULL){         
            return 1;
        }
        if((A1 == NULL) != (A2 == NULL)){
            return 0;
        }
        if(A1->data == A2->data){
            return (compareTree(A1->lchild,A2->lchild)
                    &compareTree(A1->rchild,A2->rchild));
        }else
        {
            return 0;
        }
    
    }
    
    void changeLR(BiTree &T){                //交换左右子树
        if(T->lchild == NULL && T->rchild){
            return ;
        }else
        {
            BiTree e = T;
            T->lchild = T->rchild;
            T->rchild = e->lchild;
        }
        changeLR(T->lchild);
        changeLR(T->rchild);
    }
    
    void DoubleTraverse(BiTree T){ //p148.(4) 双序遍历
        if(T == NULL) return ;
        else
        {
            if(T->lchild == NULL&&T->rchild == NULL)  //叶子节点只需要输出一次
            cout << T->data; 
            else
            {
                cout << T->data;                //先序 + 中序(如果不把叶子结点拿出来,会输出两遍)
                DoubleTraverse(T->lchild);
                cout << T->data;
                DoubleTraverse(T->rchild);
            }
            
        }
        
    }
  • 相关阅读:
    vs.net 2005 C# WinForm GroupBOX 的BUG?尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    Git安装及基本使用
    c++实现将表达式转换为逆波兰表达式
    2015年倒数第6周学习报告
    读过的书及读后感
    c++实现队列
    链表插入排序(insertion-sort-list)
    test
    [转]maven入门
    几个学习Maven不错的网址
  • 原文地址:https://www.cnblogs.com/LuMinghao/p/14033089.html
Copyright © 2011-2022 走看看