关于数据结构的学习经验分享 (二叉树相关的内容)

本文主要关于二叉树的相关内容,

首先描述了二叉树相关的基本代码,然后总结了二叉树基本的知识,最后概述了二叉树相关的题目的总结

1.二叉树基本数据结构描述 

struct BinaryTreeNode                 //定义了二叉树节点信息
{
    int                    m_nValue;    //二叉树的节点数据 
    BinaryTreeNode*        m_pLeft;     //左边指针
    BinaryTreeNode*        m_pRight;    //右边指针
};

BinaryTreeNode* CreateBinaryTreeNode(int value);         //创建二叉树节点
void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight);  //链接二叉树节点
 void PrintTreeNode(BinaryTreeNode* pNode);       //打印二叉树节点
 void PrintTree(BinaryTreeNode* pRoot);          //打印二叉树
void DestroyTree(BinaryTreeNode* pRoot);         //销毁二叉树


// 《剑指Offer——名企面试官精讲典型编程题》代码
// 著作权所有者:何海涛

#include "StdAfx.h"
#include "BinaryTree.h"

BinaryTreeNode* CreateBinaryTreeNode(int value)             //创建二叉树节点
{
    BinaryTreeNode* pNode = new BinaryTreeNode();
    pNode->m_nValue = value;
    pNode->m_pLeft = NULL;
    pNode->m_pRight = NULL;

    return pNode;
}

void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight)  //链接二叉树节点
{
    if(pParent != NULL)
    {
        pParent->m_pLeft = pLeft;
        pParent->m_pRight = pRight;
    }
}

void PrintTreeNode(BinaryTreeNode* pNode)                             //注意判断条件
{
    if(pNode != NULL)
    {
        printf("value of this node is: %d\n", pNode->m_nValue);

        if(pNode->m_pLeft != NULL)
            printf("value of its left child is: %d.\n", pNode->m_pLeft->m_nValue);
        else
            printf("left child is null.\n");

        if(pNode->m_pRight != NULL)
            printf("value of its right child is: %d.\n", pNode->m_pRight->m_nValue);
        else
            printf("right child is null.\n");
    }
    else
    {
        printf("this node is null.\n");
    }

    printf("\n");
}

void PrintTree(BinaryTreeNode* pRoot)      //  需要判断 
{
    PrintTreeNode(pRoot);

    if(pRoot != NULL)
    {
        if(pRoot->m_pLeft != NULL)
            PrintTree(pRoot->m_pLeft);

        if(pRoot->m_pRight != NULL)
            PrintTree(pRoot->m_pRight);
    }
}

void DestroyTree(BinaryTreeNode* pRoot)
{
    if(pRoot != NULL)
    {
        BinaryTreeNode* pLeft = pRoot->m_pLeft;
        BinaryTreeNode* pRight = pRoot->m_pRight;     //一定要住一顺序  递归的顺序  首先总结重复步骤 ,归纳重复步骤,最后递归 

        delete pRoot;
        pRoot = NULL;

        DestroyTree(pLeft);
        DestroyTree(pRight);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值