首页 > 其他分享 >求先序,中序,后序等遍历中第k个结点的值

求先序,中序,后序等遍历中第k个结点的值

时间:2023-08-21 09:35:49浏览次数:32  
标签:count 结点 return 求先序 int 中序 Tree printf data

代码自己想的,23年8月21没有仔细看王道书上的代码和自己写的有什么区别,测试应该是对的。

但是如果k的值大于结点个数没有做判断

#include <stdio.h>
#include <stdlib.h>
 
typedef struct TNode{
    int data;
    struct TNode *lchild,*rchild;
}TreeNode,*Tree;

void CreateTree(Tree &T)
{
    int x;
    scanf("%d",&x);
    if(x==-1)
    {
        T=NULL;
        return;
    }
    else
    {
        T=(Tree)malloc(sizeof(TreeNode));
        T->data=x;
        printf("输入%d的左子节点:",x);
        CreateTree(T->lchild);
        printf("输入%d的右子节点:",x);
        CreateTree((T->rchild));
    }
}

//先序遍历二叉树(递归实现)
int PreOrderTree(Tree T,int k)
{
    static int count=0;
    if (T==NULL)
    {
        return -1;
    }
    else
    {
        if(++count==k)
        {
            printf("第3个元素的值为%d",T->data);
            return 0;
        }
        PreOrderTree(T->lchild,k);
        PreOrderTree(T->rchild,k);
    }
}

//中序遍历二叉树(递归实现)
int MidOrderTree(Tree T,int k)
{
    static int count=0;
    if(T==NULL)    
    {
        return -1;
    }
    else
    {
        MidOrderTree(T->lchild,k);
        if(++count==k)
        {
            printf("第3个结点值为%d",T->data);
            return 0;
        }
        MidOrderTree(T->rchild,k);
    }
} 

//后序遍历二叉树(递归实现)
int LatOrderTree(Tree T,int k)
{
    static int count=0;
    if(T==NULL)    
    {
        return -1;
    }
    else
    {
        LatOrderTree(T->lchild,k);
        LatOrderTree(T->rchild,k);
        if(++count==k)
        {
            printf("第6个结点值为%d",T->data);
            return 0;
        }
    }
}

int main()
{
    Tree T;
    CreateTree(T);
    PreOrderTree(T,3);
    MidOrderTree(T,5);
    LatOrderTree(T,6);
    return 0;
}

 

标签:count,结点,return,求先序,int,中序,Tree,printf,data
From: https://www.cnblogs.com/simpleset/p/17645138.html

相关文章

  • 【剑指Offer】62、二叉搜索树的第k个结点
    【剑指Offer】62、二叉搜索树的第k个结点题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路:本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显......
  • 代码随想录算法训练营第十八天| 513.找树左下角的值 112. 路径总和 106.从中序与
     找树左下角的值     卡哥建议:本地递归偏难,反而迭代简单属于模板题, 两种方法掌握一下   题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html   做题思路:   题目说......
  • Leetcode 19. 删除链表的倒数第N个结点(Remove nth node from end of list)
    题目链接给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点.示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=1001<=n<=sz思路暴力解法:可以先......
  • LeetCode -- 19. 删除链表的倒数第 N 个结点
     一般的删除问题,可以直接删除(找符合条件的,找到了直接删掉),延迟删除(打标记,找完了再删除),栈,双指针 在链表中删除一个节点,要找到其前面一个节点cur,然后cur->next=cur->next->next即可 方法一:直接删除我们先算出链表长度len,要删除倒第n个节点就是删除第len-n......
  • 查找值为x的结点
    查找值为x的结点在一棵二叉树中查找值为X的结点,并返回这个结点地址。如果二叉树是空树,直接返回NULL;如果不为空,先判断根结点的值是不是我们要找的结点值,如果是直接返回根结点地址,如果不是,那就判断左右子树能不能找到;如果左右子树都找不到,说明不存在要找的结点,返回NULL。//二叉......
  • 二叉树的结点个数
    二叉树的节点个数假设二叉树如下图所示:要想知道二叉树的节点个数,我们通常会想到遍历二叉树的同时使用一个变量来记录,假设变量为size,使用前序遍历,每遍历一个结点让size++,可设置程序如下:intTreeSize(BTNode*root){ intsize=0; if(root==NULL) { return0; } size......
  • 代码随想录第四天|力扣24.两两交换链表节点、力扣19.删除链表的倒数第N个结点、力扣面
    两两交换链表中的节点(力扣24.)dummyhead.next=head;cur=dummyhead;while(cur.next!=null&&cur.next.next!=null)temp=cur.next;temp1=cur.next.next.next;cur.next=cur.next.next;cur.next.next=temp;temp.next=temp1;cur=cur.next.next;returndummyhead.n......
  • 链表中环的入口结点
    title:链表中环的入口结点date:2023-07-2511:57:00tags:-c/c++categories:-算法-笔试top:链表中环的入口结点题目来自acwing题目(点击跳转)给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。数据范围节点val值取值范围[1,1000]。节......
  • 二叉树叶子结点的个数Python
    实现二叉树叶子节点个数的Python代码概述在本文中,我将向你展示如何使用Python来计算二叉树的叶子节点个数。我将向你解释这个过程的每一步,并提供相应的代码示例。步骤下面是计算二叉树叶子节点个数的步骤:步骤描述1创建一个二叉树2定义一个函数来计算叶子节点个......
  • [NOIP2001 普及组] 求先序排列
    不会吧不会吧,不会有人连模板题不会做吧?那个人不会就是我吧题目描述给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数$\le8$)。输入格式共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。输出格式共......