zoukankan      html  css  js  c++  java
  • 线索二叉树

    数据结构课好像略过了,现在补一下代码。

    struct Treenode{
        int val;
        Treenode* left;
        Treenode* right;
        int leftsign;
        int rightsign;
    };
    
    class Solution {
    public:
        void create(Treenode* p,Treenode* pre){  //线索二叉树建立
            if(p == NULL) return;
            create(p->left,pre);
            if(p->left == NULL){
                p->left = pre;
                p->leftsign = 1;
            }
            if(pre != NULL && pre->right == NULL){
                pre->right = p;
                pre->rightsign = 1;
            }
            pre = p;
            create(p->right,pre);
        }
        
        void createtree(Treenode* head){
            Treenode* pre = NULL;
            if(head != NULL){
                create(head,pre);
                pre->right = NULL; //中序的最后一个节点
                pre->rightsign = 1;
            }
        }
    
        Treenode* Firstnode(Treenode* p){
            while(p->leftsign == 0) p = p->left;
            return p;
        }
        Treenode* Nextnode(Treenode* p){
            if(p->rightsign == 0) return Firstnode(p->right);  //如果不是线索就找到右节点的最左节点
            else return p->right;   //如果是线索,就返回序列的后继节点
        }
        Treenode* INORDER(Treenode* head){
            for(Treenode* p=Firstnode(head);p!=NULL;p = Nextnode(p))
                cout << p->val << endl;
        }
    };

    ——

  • 相关阅读:
    table 如何不越过父级div
    sqlite3_column_type 与 SQLITE_NULL的区别
    lua 协程的理解
    linux 信号
    linux 查看文件夹大小
    linux 僵屍进程
    软件架构的理解
    jquery正则表达式
    linux C遍历目录下文件
    linux 进程间同步互斥
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10591480.html
Copyright © 2011-2022 走看看