zoukankan      html  css  js  c++  java
  • 二叉树的创建和遍历(C版和java版)

    以这颗树为例:#表示空节点
    前序遍历(根->左->右)为:ABD##E##C#F##
    中序遍历(左->根->右)为:#D#B#E#A#C#F#
    后序遍历(左->右->根)为:##D##EB###FCA


    #include <stdio.h>
    #include <stdlib.h>
    
    typedef char TElemType;
    typedef struct BiTNode
    {
        TElemType data;
        struct BiTNode *lchild,*rchild; 
    
    }BiTNode,*BiTree;
    
    void ForEachTree(BiTree T)
    {
        if(T == NULL){
            return;
        }
    //    printf(" %c ",T->data);前序遍历
        ForEachTree(T->lchild);
        printf(" %c ",T->data);//中序遍历
        ForEachTree(T->rchild);
    //    printf(" %c ",T->data);后序遍历
    }
    
    void CreateBiTree(BiTree *T)
    {
        TElemType ch;
        scanf("%c",&ch);
        if('#' == ch){
            *T = NULL;
        }else{
            *T = (BiTree)malloc(sizeof(BiTNode));
        
    
            (*T)->data = ch;
            CreateBiTree(&(*T)->lchild);
        
            CreateBiTree(&(*T)->rchild);
        
        }
    }
    void main(){
        //前序创建树,中序输出树
        BiTree T;//根节点
        CreateBiTree(&T);
    
        ForEachTree(T);
    
    }

     java版本实现:

    由于java没有c的指针,所以相对于c来说实现起来比较别扭,但思路没问题

    在java中,不管这个节点是不是空节点,都会申请空间,只不过这个节点的数据、左子树、右子树都是null,但这个节点不是null,如下图

    public class BiThrTree {
          
        public void createTree(BiThrNode T){
            String str;
            str = new Scanner(System.in).next();
            if("#".equals(str)){
                //如果是'#',则不做任何处理,也就是说这个节点的数据、左孩子、右孩子都是null
                //但这个节点不是null,这里需要注意
            }else{
                T.data = str;//给节点赋值
               
                T.lchild = new BiThrNode();
                T.rchild = new BiThrNode();
                createTree(T.lchild);
                createTree(T.rchild);
                
            }
        }
        public void forEachTree(BiThrNode T){
            if(T.data == null){//判断这个节点的数据是否为空
                return;
            }
            forEachTree(T.lchild);
            forEachTree(T.rchild);
            System.out.print(T.data);//后序遍历
            
        }
       public static void main(String[] args) {
            BiThrNode T = new BiThrNode();
            new BiThrTree().createTree(T);
            new BiThrTree().forEachTree(T);
                  
        }
        
    }
    
    class BiThrNode{
        String data;
        BiThrNode lchild;
        BiThrNode rchild;
      
    }

     

  • 相关阅读:
    Closing File Descriptors
    Redirecting stdout using exec
    Debugging on part(s) of the script
    Android深入浅出之Audio 第一部分 AudioTrack分析
    svn在linux下的使用(svn命令)[转]
    Android深入浅出之Binder机制
    bash中获取文件路径和文件命的函数
    Android深入浅出之Audio 第一部分 AudioTrack分析
    Shell的脚本编程
    Android深入浅出之Surface
  • 原文地址:https://www.cnblogs.com/wwzyy/p/6192803.html
Copyright © 2011-2022 走看看