zoukankan      html  css  js  c++  java
  • 二叉树层次遍历_判断结点所属层次

    #include<stdlib.h>
    #include<stdio.h>
    #include<stack>
    #define N 50
    using namespace std;
    
    typedef struct tree{
        char ch;
        struct tree *lchild;
        struct tree *rchild;
    }BitTree; 
    
    //数组输入
    BitTree *CreateTree(int A[], int i, int n){
        BitTree *bt;
        if(i>n)
            return NULL;
        else{
            bt=(BitTree *)malloc(sizeof(BitTree));
            if(A[i]=='#')
                return NULL;
            bt->ch=A[i];
            bt->lchild=CreateTree(A, 2*i, n);
            bt->rchild=CreateTree(A, 2*i+1, n);
            return bt;
        }
    } 
    
    //层次遍历
    void LayeredOrderTraverse(BitTree *bt){
        BitTree *QUEUE[N], *p;
        int front, rear;
        if(bt != NULL){
            QUEUE[0] = bt;
            front = 0;
            rear = 1;
            while(front < rear){
                p = QUEUE[front++];
                printf("%c ", p->ch);
                if(p->lchild != NULL)
                    QUEUE[rear++] = p->lchild;
                if(p->rchild != NULL)
                    QUEUE[rear++] = p->rchild;
            }
        }
    }
     
    //求结点所在层次
    int LayerOrder(BitTree *bt, char c){
        BitTree *STACK1[N], *p = bt;
        int STACK2[N], flag, top = -1;
        while(p != NULL || top != -1){
            while(p != NULL){
                STACK1[++top] = p;
                STACK2[top] = 0;
                p = p->lchild;
            }
            p = STACK1[top];
            flag = STACK2[top--];
            if(flag == 1){
                if(p->ch == c)
                    return top+2;
                p = NULL;//容易漏的一步 
            }
            else{
                STACK1[++top] = p;
                STACK2[top] = 1;
                p = p->rchild;
            }
        } 
    } 
    
    int main(){
        int A[N]={'#','A','B','C','D','E','#','F','G','H'};
        BitTree *bt=CreateTree(A,1,9);
        printf("LayeredOrderTraverse:
    ");
        LayeredOrderTraverse(bt);
        printf("
    结点A所在层次:
    ");
        printf("%d",LayerOrder(bt, 'A')); 
        printf("
    结点B所在层次:
    ");
        printf("%d",LayerOrder(bt, 'B')); 
        printf("
    结点C所在层次:
    ");
        printf("%d",LayerOrder(bt, 'C')); 
        printf("
    结点D所在层次:
    ");
        printf("%d",LayerOrder(bt, 'D')); 
        printf("
    结点E所在层次:
    ");
        printf("%d",LayerOrder(bt, 'E'));
        printf("
    结点F所在层次:
    ");
        printf("%d",LayerOrder(bt, 'F'));  
        printf("
    结点G所在层次:
    ");
        printf("%d",LayerOrder(bt, 'G')); 
        printf("
    结点H所在层次:
    ");
        printf("%d",LayerOrder(bt, 'H')); 
        return 0; 
    }
    /*
    输入样例:ABDG##H##E##C#F##
               A
              / 
             B   C
            /    
           D   E   F
          / 
         G  H
    */

  • 相关阅读:
    Git 远程仓库 git remote
    同一台电脑关于多个SSH KEY管理
    dotnet core on Linux 环境搭建及入门demo
    Cannot load JDBC driver class 'com.mysql.jdbc.Driver '
    Mac OS 配置Maven
    Linux中profile、bashrc、bash_profile之间的区别和联系
    如何在Mac的Finder中显示/usr、/tmp、/var等隐藏目录
    Mac OS X 下查看和设置JAVA_HOME
    SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
    事件
  • 原文地址:https://www.cnblogs.com/exciting/p/10048957.html
Copyright © 2011-2022 走看看