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);
    }
    
  • 相关阅读:
    [css]继承关系(一)
    Trie树-提高海量数据的模糊查询性能
    [C]struct结构化数据的一些要点
    [C]表达式结合规律和运算符优先级
    [C]副作用和序列点
    [C]链接和生存周期
    [PHP]关于连接MySQL的问题
    IT网址大全
    VUE 生命周期
    Vue 组件间传值
  • 原文地址:https://www.cnblogs.com/kkyblog/p/11250403.html
Copyright © 2011-2022 走看看