zoukankan      html  css  js  c++  java
  • 二叉树的创建与遍历(递归)

    一.二叉树的创建

    typedef struct TreeNode
    {
        char data;
        struct TreeNode *left;
        struct TreeNode *right;
    }
    

    1.C语言

    void CreateTree(TreeNode **T)
    {
        char data;
        scanf("%d",&data);  //输入节点数据
        if(data=='#')  
            *T=NULL; //若为#则代表该节点不存在
        else 
        {
             *T=(TreeNode *)malloc(sizeof(TreeNode)); //为该节点开辟内存
             (*T)->value=data;//为该节点赋予数据
             CreateTree(&((*T)->left));//递归 创建左子节点
             CreateTree(&((*T)->right));//递归 创建右子节点
        }
    }
    

    2.C++

    void CreateTree(TreeNode * &T) // C语言采用二级指针 C++则可以使用引用来代替
    /*
    (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
    (2)可以有const指针,但是没有const引用;
    (3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
    (4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
    (5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
    (6)"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小;
    (7)指针和引用的自增(++)运算意义不一样;
    */
    {
        char data;
        cin>>data;
        if(data=='#')
            T=NULL;
        else 
        {
             T=new TreeNode;
             T->value=data;
             CreateTree(T->left);
             CreateTree(T->right);
        }
    }
    

    二.二叉树的三种遍历方式

    二叉树定义

    struct TreeNode 
    {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    };
    

    1.前序遍历

    vector<int> inorderTraversal(TreeNode* root) 
    {
        vector<int> Node;
        FindNode(root,Node);
        return Node;
    }
    void FindNode(TreeNode*root,vector<int>& Node)
    {
        if(root == NULL)
            return;
        Node.push_back(root->val);
        FindNode(root->left,Node);
        FindNode(root->right,Node);
    }
    

    2.中序遍历

    vector<int> inorderTraversal(TreeNode* root) 
    {
        vector<int> Node;
        FindNode(root,Node);
        return Node;
    }
    void FindNode(TreeNode*root,vector<int>& Node)
    {
        if(root == NULL)
            return;
        FindNode(root->left,Node);
        Node.push_back(root->val);
        FindNode(root->right,Node);
    }
    

    3.后序遍历

    vector<int> inorderTraversal(TreeNode* root) 
    {
        vector<int> Node;
        FindNode(root,Node);
        return Node;
    }
    void FindNode(TreeNode*root,vector<int>& Node)
    {
        if(root == NULL)
            return;
        FindNode(root->left,Node);
        FindNode(root->right,Node);
        Node.push_back(root->val);
    }
    
  • 相关阅读:
    完毕port(CompletionPort)具体解释
    [Java聊天室server]实战之五 读写循环(服务端)
    ImageMagick的安装及使用
    STL学习小结
    ORACLE中%TYPE和%ROWTYPE的使用
    命令模式在MVC框架中的应用
    代码阅读分析工具Understand 2.0试用
    SimpleDateFormat 的线程安全问题与解决方式
    C++垃圾回收机制
    TH文字编辑器开发的第一个游戏,唐伯虎泡妞
  • 原文地址:https://www.cnblogs.com/kkyblog/p/11250403.html
Copyright © 2011-2022 走看看