zoukankan      html  css  js  c++  java
  • 排序二叉树删除节点、二叉树后序、先序非递归遍历

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 typedef char ElemType; 
      4 
      5 typedef struct BiNode{
      6     ElemType data;
      7     BiNode* lchild;
      8     BiNode* rchild;     
      9     BiNode(ElemType data, BiNode* lchild, BiNode* rchild) {
     10         this->data = data;
     11         this->lchild = lchild;
     12         this->rchild = rchild;
     13     }   
     14 }*BiTree;
     15 
     16 stack<BiTree>s;
     17 
     18 void postorder(BiTree T){
     19     BiTree p=T;
     20     BiTree r=NULL;
     21     while(p||!s.empty()){
     22         if(p){
     23             s.push(p);
     24             p=p->lchild;
     25         }
     26         else{
     27             p=s.top();
     28             if(p->rchild&&p->rchild!=r)p=p->rchild;
     29             else{
     30                 s.pop();
     31                 printf("%c",p->data);
     32                 r=p;
     33                 p=NULL;
     34             }
     35         }
     36     }
     37 
     38 }
     39 
     40 void preorder(BiTree T){
     41     while(T||!s.empty()){
     42         //if(s.empty())printf("q");
     43         if(T){
     44             printf("%c",T->data);
     45             s.push(T);
     46             T=T->lchild;
     47         }
     48         else{
     49             T=s.top();
     50             s.pop();
     51             T=T->rchild;
     52         }
     53         
     54 
     55     }
     56 }
     57 
     58 void delnode(BiTree &p){
     59     if(!p->lchild)p=p->rchild;
     60     else if(!p->rchild)p=p->lchild;
     61     else{
     62         BiTree t=p->rchild;
     63         BiTree q=p;
     64         while(t->lchild){
     65             q=t;
     66             t=t->lchild;
     67         }
     68         p->data=t->data;
     69         if(q==p){
     70             p->rchild=t->rchild;
     71             //free(t);
     72         }
     73         else{
     74             q->lchild=t->rchild;
     75             t=NULL;
     76         }
     77     }
     78 }
     79 
     80 BiTree findnode(BiTree &T,char x){
     81     if(!T||T->data==x){
     82         delnode(T);
     83         return T;
     84     }
     85     if(x<T->data)return findnode(T->lchild,x);
     86     return findnode(T->rchild,x);
     87 }
     88 
     89 int main(){
     90     /*BiNode* v4 = new BiNode('4', NULL, NULL);
     91     BiNode* v6 = new BiNode('6', NULL, NULL);
     92     BiNode* v5 = new BiNode('5', v4, v6);
     93     BiNode* v1 = new BiNode('1', NULL, NULL);
     94     BiNode* v3 = new BiNode('3', v1, v5);
     95     BiNode* v7 = new BiNode('7', v3, NULL);*/
     96     BiNode* v7 = new BiNode('7', NULL, NULL);
     97     BiNode* v1 = new BiNode('1', NULL, NULL);
     98     BiNode* v3 = new BiNode('3', NULL, NULL);
     99     BiNode* v2 = new BiNode('2', v1, v3);
    100     BiNode* v5 = new BiNode('5', NULL, NULL);
    101     BiNode* v6 = new BiNode('6', v5, v7);
    102     BiNode* v4 = new BiNode('4', v2, v6);
    103     //BiNode* T = v4;*/
    104     BiTree T=v7;
    105     preorder(T);
    106     printf("
    ");
    107     findnode(T,'3');
    108     preorder(T);
    109     printf("
    ");
    110     postorder(T);
    111 }
  • 相关阅读:
    转 SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
    转 微服务的4个设计原则和19个解决方案
    骑士问题
    种树(洛谷P1250)
    你的飞碟在这儿(洛谷P1200)
    Hello world
    [zt][cocos2dxwin32] 安装部署流程整理
    (ZT)关于IAP防止破解的几点
    (ZT)UIImage应用与内存管理
    在Mac上发布QT的程序
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/14010372.html
Copyright © 2011-2022 走看看