zoukankan      html  css  js  c++  java
  • 分别求二叉树前、中、后序的第k个节点

    一、求二叉树的前序遍历中的第k个节点

    //求先序遍历中的第k个节点的值
    int n=1;
    elemType preNode(BTNode *root,int k){
        if(root==NULL)
            return ' ';
        if(n==k)
            return root->data;
        n++;
        elemType ch = preNode(root->lchild,k);
        if(ch!=' ')
            return ch;
        ch = preNode(root->rchild,k);
        return ch;
    } 
    //求先序遍历中的第k个节点的值(非递归)
    elemType preNode2(BTNode *root,int k){
        if(root!=NULL){
            int n=0;
            stack<BTNode*> s;
            BTNode *p=root;
            s.push(p);
            while(!s.empty()){
                p=s.top();
                s.pop();
                n++;
                if(n==k){
                    //printf("%c ",p->data);
                    return p->data;
                }
                if(p->rchild!=NULL)
                    s.push(p->rchild);
                if(p->lchild!=NULL)
                    s.push(p->lchild);
            }
        }else
            return ' ';
    }

    二、求二叉树的中序遍历中的第k个节点

    //求中序遍历中的第k个节点的值
    elemType inNode(BTNode *root,int k){
        if(root==NULL)
            return ' ';
        stack<BTNode*> s;
        BTNode *p=root;
        int n=0;
        while(!s.empty()||p){
            while(p){
                s.push(p);
                p=p->lchild;
            }
            if(!s.empty()){
                p=s.top();
                s.pop();
                n++;
                if(n==k)
                    return p->data;
                p=p->rchild;
            }
        }
    } 

    三、求二叉树的后序遍历中的第k个节点

    //求后序遍历中的第k个节点的值
    elemType postNode(BTNode *root,int k){
        BTNode* stack[100];
        int top=-1;
        int f=1;
        int n=0;
        BTNode *b=NULL;
        if(root!=NULL){
            BTNode *p=root;
            do{
                while(p){
                    stack[++top]=p;
                    p=p->lchild;
                }
                f=1;
                b=NULL;
                while(top>-1&&f){
                    p=stack[top];
                    if(p->rchild==b){
                        n++;
                        if(n==k)
                            return p->data;
                        b=p;
                        top--;
                    }else{
                        p=p->rchild;
                        f=0;
                    }
                }
            }while(top>-1);
        }
    } 
  • 相关阅读:
    web页面常用方法及INI文件的读取方法
    winform 三个Panel左右切换(panel里面填充图片)
    图片渐出轮播的效果
    Winform跑马灯——Graphics运用
    .net 3.5 新功能重写ToInt()方法
    style.display
    SQL: 分页SQL SQL2005函数分页!
    JS: 验证输入必须为数字
    Table 里面点标题会进行排序
    在Div中绑定数据
  • 原文地址:https://www.cnblogs.com/hekuiFlye/p/9574342.html
Copyright © 2011-2022 走看看