• 交换左右子树


    可能编译时会有些语法小错误(比如分号,->,等),很容易就自己纠正了哦,思路绝对是完全正确的,所以用的话就自己试着改改吧,直接复制粘贴,就正确,岂不是太没写代码体验了,自己改改才印象更加深刻的呢()~~~~;

    交换左右子树

    //算法5.5 计算二叉树的深度,增加左右子数交换等功能
    #include<iostream>
    using namespace std;
    
    //二叉树的二叉链表存储表示
    typedef struct BiNode
    {				
    	char data;						//结点数据域
    	struct BiNode *lchild,*rchild;	//左右孩子指针
    }BiTNode,*BiTree;
    
    //用算法5.3建立二叉链表
    void CreateBiTree(BiTree &T)
    {	
    	//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    	char ch;
    	cin >> ch;
    	if(ch=='#')  T=NULL;			//递归结束,建空树
    	else{							
    		T=new BiTNode;
    		T->data=ch;					//生成根结点
    		CreateBiTree(T->lchild);	//递归创建左子树
    		CreateBiTree(T->rchild);	//递归创建右子树
    	}								//else
    }									//CreateBiTree
    
    int Depth(BiTree T)
    { 
    	int m,n;
    	if(T == NULL ) return 0;        //如果是空树,深度为0,递归结束
    	else 
    	{							
    		m=Depth(T->lchild);			//递归计算左子树的深度记为m
    		n=Depth(T->rchild);			//递归计算右子树的深度记为n
    		if(m>n) return(m+1);		//二叉树的深度为m 与n的较大者加1
    		else return (n+1);
    	}
    }
    void InOrderTraverse(BiTree T){  
    	//中序遍历二叉树T的递归算法
    	if(T){
    		InOrderTraverse(T->lchild);
    		cout << T->data;
    		InOrderTraverse(T->rchild);
    	}
    }
    void inChangeLR(BiTree &T)
    {
    	BiTree temp;
    	if(T){
    		if(T->lchild==NULL&&T->rchild==NULL){
    		return;
    	} else{
    		temp=T->lchild;
    		T->lchild = T->rchild;
    		T->rchild=temp;
    	}
    	inChangeLR(T->lchild);
    	inChangeLR(T->rchild);
    	}
    }
    void preChangeLR(BiTree &T)
    {
    BiTree temp;
    	if(T){
    		inChangeLR(T->lchild);
    		if(T->lchild==NULL&&T->rchild==NULL){
    		return;
    	} else{
    		temp=T->lchild;
    		T->lchild = T->rchild;
    		T->rchild=temp;
    	}
    	inChangeLR(T->rchild);
    	}
    }
    void postChangeLR(BiTree &T)
    {
    BiTree temp;
    	if(T){
    		inChangeLR(T->lchild);
    		inChangeLR(T->rchild);
    		if(T->lchild==NULL&&T->rchild==NULL){
    		return;
    	} else{
    		temp=T->lchild;
    		T->lchild = T->rchild;
    		T->rchild=temp;
    	}
    	
    	}
    }
    
    int main()
    {
    	BiTree tree;
    	cout<<"请输入建立二叉链表的序列:
    ";
    	CreateBiTree(tree);
    
        InOrderTraverse(tree);
    	cout<<"数的深度为:"<<Depth(tree)<<endl;
    	cout<<"中序遍历的结果为:
    ";
    	InOrderTraverse(tree);
        cout<<"
    ";
        //以下三种执行其中一种
    	cout<<"交换后中序遍历的结果为:
    ";
        inChangeLR(tree);
        InOrderTraverse(tree);
    	cout<<"
    ";
    	cout<<"交换后前序序遍历的结果为:
    ";
        preChangeLR(tree);
        InOrderTraverse(tree);
    	cout<<"
    ";
    	cout<<"交换后后序遍历的结果为:
    ";
        postChangeLR(tree);
        InOrderTraverse(tree);
    
        return 0; 
    }
    
    
  • 相关阅读:
    docker如何将运行中的容器保存为docker镜像?
    java8流的地址
    maven命令package、install、deploy
    windows下设置redis开机自启动
    mysql的安装参考
    service mysql启动失败unit not found
    JAVA中Wait()与Notity()、同步队列与等待队列
    Java8函数式编程
    Groovy ConfigSlurper()读取配置文件简易示例
    SoapUI官方文档
  • 原文地址:https://www.cnblogs.com/ygjzs/p/11874619.html
Copyright © 2020-2023  润新知