二叉树的遍历与建立

Posted amema

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的遍历与建立相关的知识,希望对你有一定的参考价值。

二叉树简介

  二叉树是一种非线性结构,二叉树的遍历方式有三种:前序、中序和后序。  在学习二叉树的时候,把二叉树分为三部分:根结点,左子树和右子树,所谓遍历方式即访问这三部分的先后顺序。
我对于二叉树遍历的方式的理解是這样的:
前序遍历:先访问根结点,再访问左子树,最后访问右子树。
中序遍历:先访问左子树,再访问根节点,最后访问右子树。
后序遍历:先访问左子树,再访问右子树,最后访问根结点。

技术图片

 

1.二叉树的建立

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<assert.h>
#include<stack>
#include<queue>
using namespace std;
template<class T>
struct BinaryTreeNode
{
    T _data;
    BinaryTreeNode<T>* _left;
    BinaryTreeNode<T>* _right;
    BinaryTreeNode(const T& d)
         :_data(d)
         ,_left(NULL)
         , _right(NULL)
    {
         cout << "构造二叉树结点" << endl;
    }
};
template<class T>
class BinaryTree
{
    typedef BinaryTreeNode<T> Node;
private:
    Node* _root;
protected:
    Node* _CreateTree(T* a, size_t n, const T& invalid, size_t& index)  
    {
         //index = 0;           Node* root = NULL;
         if (index < n && a[index] != invalid)
         {
             root = new Node(a[index]);
             root->_left = _CreateTree(a, n, invalid, ++index);    
           root->_right = _CreateTree(a, n, invalid, ++index);
         }
         return root;
    }
2.前中后序遍历
void _PrevOrder(Node* root) //前序遍历 { if (root == NULL) //返回条件 return; cout << root->_data << " "; _PrevOrder(root->_left); _PrevOrder(root->_right);
}
    void _InOrder(Node* root)    //中序遍历
    {
         if (root == NULL)       //返回条件
             return;
         _InOrder(root->_left);            
         cout << root->_data << " ";
         _InOrder(root->_right);
    }
    void _PostOrder(Node* root)   //后序遍历
    {
         if (root == NULL)        //返回条件
             return;
         _PostOrder(root->_left);
         _PostOrder(root->_right);
         cout << root->_data << " ";
    }
技术图片

 

 

以上是关于二叉树的遍历与建立的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的遍历与建立

二叉树的遍历

线索二叉树的建立与遍历

二叉树的非递归遍历

Python 二叉树的创建和遍历、重建

二叉树的遍历