• 树的c++实现--建立一棵树


    在学习二分查找树的时候,在递归的问题上遇到不少的问题,在这里和大家分享一下自己的学习过程

    我在学习树的知识的时候,没有把树当做一个类,只把一个结点当做一个类。树的实现都在函数中,如果大家有兴趣可以试试在一个类中实现树

    为了方便起见,这不同模板,结点的值用整数型

    结点类的设计:

      结点类中包含一个表示该节点值的val变量,和指向左结点和指向右结点的指针。这三者构成了一个简单的结点

    1 class Node{
    2 public:
    3     int val;
    4     Node *left, *right;
    5     Node(){right = NULL; left = NULL;}
    6 };   

    建立一棵树主要通过递归来实现

     1 Node* build(Node* root, int val){
     2       if(root == NULL){
     3            root = new Node();
     4            root->val = val;
     5            return root;
     6       }
     7       if(val < root->val) root->left = build(root->left, val);
     8      else if(val > root->val) root->right = build(root->right, val);
     9      return root;
    10 }

    这里我们用一个函数levelOrder() 来验证我们的树是否正确的建立。该函数是按层遍历树的结点,输出每个结点的值。实现过程在后面的博客会详细的说,现在

    直接拿来用就行啦。

     1 void levelOrder(Node* root){
     2     queue<Node*> q;
     3     q.push(root);
     4     while(!q.empty()){
     5         Node *temp = q.front();
     6         q.pop();
     7         cout<<temp->val<<" ";
     8         if(temp->left) q.push(temp->left);
     9         if(temp->right) q.push(temp->right);
    10     }
    11 }
    12 int main(){
    13     Node *root = NULL;
    14     int t[] = {5,4,6,3,7};
    15     for(int i = 0; i < 5; i++) root = build(root, t[i]);
    16     levelOrder(root);
    17 return 0;}

    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    TCP Socket服务器编程[转文]
    http协议学习和总结系列[转 ]
    linux C函数大全
    HTTP 协议详解
    Pthread 多线程总结
    linux 中解析命令行参数 (getopt_long用法)
    微软企业库4.1学习笔记(十八)缓存模块6 缓存的设计目的
    微软企业库4.1学习笔记(十七)缓存模块5 缓存的典型用法
    进程和线程的区别
    C#二叉树遍历算法实现浅析
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8962036.html
Copyright © 2020-2023  润新知