• [二叉树算法]先序中序后序遍历 算法应用总结


    //先序遍历下的第k个结点 
    int preorder(BTNode *t,int k,int n){
        int result;
        if(t==null) return 0;
        if(n==k) return t->data;
        result=preorder(t->lchild,k,n+1);
        if(result!=0) return result;
        else{
            return preorder(t->rchild,k,n+1);
        }
    }
    //先序中序 非递归
    //中序遍历下的第k个结点
    //中序遍历的第k个结点 
    int count=0;
    BTNode InOrder(BTNode *t,int k,int n){
        if(t==null && k<0) return null;
        BTNode target=null;
        if(t->lchild!=null){
            target=InOrder(t->lchild,k,n+1);
        }
        count++;
        if(target==null){
            if(count==k){
                target=t;
                return target;
            }
        }
        if(target==null && t->rchild!=null){
            target=InOrder(t->rchild,k,n+1);
        }
        return target;
    }
    //求二叉树中值为x的层号 
    void NodeLevel(BTNode *t,int x,int &h,int temp_h){//当前层次
        if(t==null) h=0;
        else if(t->data==x) h=temp_h;
        else{
            Node7h(t->lchild,x,h,temp_h+1);
            if(h==0){
                NodeLevel(t->rchild,x,h,temp_h+1);
            }
        }
    }
    //删除一颗二叉树
    void deleteTree(BTNode *t){
        if(t==null) return;
        else{
            deleteTree(t->lchild);
            deleteTree(t->rchild);
            free(t);
        }
    }
    //交换左右子树 
    void swapChild(BTNode *t,BTNode *t1){
        if(t==null) t1=null;
        else{
            t1=(BTNode*)malloc(sizeof(BTNode));
            t1->data=t->data;
            swapChild(t->lchild,t1->rchild);
            swapChild(t->rchild,t1->lchild);
        }
    }
    //非递归 不新建结点
    void swapChild(BTNode *t){
        if(t==null) return;
        InitStack(S);
        push(&s,t);
        BTNode *p;
        while(!isEmpty(s)){
            t=pop(&s);
            p=t->lchild;
            t->lchild=t->rchild;
            t->rchild=p;
            if(t->rchild!=null){
                push(&s,t->rchild);
            }
            if(t->lchild!=null){
                push(&s,t->lchild);
            }
        }
    }
  • 相关阅读:
    Spring多数据源动态切换
    IntelliJ Idea使用代码格式化,Tab制表符进行缩进
    idea 快捷键
    final关键字的功能概述
    IntelliJ Idea 常用快捷键列表
    Log4j.properties配置详解
    IDEA添加try catch快捷键
    使用 JMeter 进行压力测试
    idea 复制当前行到下一行快捷键
    js父窗口opener与parent
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12095435.html
Copyright © 2020-2023  润新知