搜尋

首頁  >  問答  >  主體

c++ 二叉树中搜索节点

创建了一个二叉树,希望搜索到给定info值的节点

以下为二叉树的相关结构类型定义:

#include "stdio.h"
#include"stdlib.h"
#include "iostream"
using namespace std;
typedef char ELEMTYPE;

#define number 20;
struct BinTreeNode;
typedef struct BinTreeNode* PBinTreeNode;
struct BinTreeNode
{
    ELEMTYPE info;
    PBinTreeNode lchild;
    PBinTreeNode rchild;
};
typedef struct BinTreeNode* PLNBinTree;

以下为创建二叉树算法:
root为已创建好的BinTreeNode类型节点,然后输入一个字符测试是否左子树/右子树为空,不为空则创建左子树/右子树

void constructBinTree(PLNBinTree root)//先根递归创建二叉树
{
    if (root == NULL)
        return;

    char temp = '0';
    cout << "输入左值";
    cin >> temp;
    if (temp == '#')
    {
        root->lchild = NULL;
        
    }
    else
    {
        root->lchild = new BinTreeNode;
        
        root->lchild->info = temp;
        
    }



    cout << "输入右值";
    cin >> temp;
    if (temp == '#')
    {
        root->rchild = NULL;
        
    }
    else
    {
        root->rchild = new BinTreeNode;
        
        root->rchild->info = temp;
        
    }
    constructBinTree(root->lchild);
    constructBinTree(root->rchild);

}

以下为搜索算法:
PBinTreeNode find(PLNBinTree root, char x)//寻找x所在位置
{

if (root == NULL)
    return 0;

if (root->info == x)
{
    return root;
 }
else return 0;
PBinTreeNode c;
c =  find(root->lchild, x);
if(!c)
    find(root->rchild, x);
return c;

}

以下为测试时结果:


找不出问题所在,求各位会的指教。谢谢!

伊谢尔伦伊谢尔伦2804 天前922

全部回覆(2)我來回復

  • 怪我咯

    怪我咯2017-04-17 13:52:15

    constructBinTree()的參數要傳引用才行,你這樣按值傳遞,肯定是有問題的root->lchild = new BinTreeNode;這一句只是給一個臨時變數root的左孩子new了一對象,但是root所代表的外層指針是沒有左孩子的!形參root和其實參指向的是兩個不同的記憶體區。明白了嗎?

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:52:15

    https://github.com/bloomsource/rbtree

    回覆
    0
  • 取消回覆