zoukankan      html  css  js  c++  java
  • 二叉树基本操作(一)

    /*
    关于非线性的数据结构当然树形结构最重要,而树里面又属二叉树最重要,
    所以在后面将列出二叉树的各种使用方法,包括基本的遍历,和我在一些
    资料上看到的关于二叉树的面试题型。至于一些很高级的树形结构,如平
    衡树,还有线索树等,就暂时不写出来,先完成最基本的,再一点点的加
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    //typedef void * ElemType;
    typedef int ElemType;
    
    typedef struct TreeNode
    {
    	ElemType m_nValue;
    	struct TreeNode *m_pLeft;
    	struct TreeNode *m_pRight;
    }BinaryTreeNode;
    
    /*
    二叉树主要的难点是遍历
    基本上所有的算法都是基于二叉树的遍历的
    至于创建二叉树就需要在输入的时候把线性的结构转换成非线性的
    用输入的方式创建二叉树
    */
    
    //将输入独立起来,
    BinaryTreeNode * CreateTree(BinaryTreeNode *bTree)
    {
    	int input;
    	scanf("%d", &input);			//按先序建立二叉树
    	if (input == 0)
    	{
    		bTree = NULL;	//置为NULL后结束
    		return bTree;
    	}
    	bTree = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
    	bTree->m_nValue = input;
    	bTree->m_pLeft = CreateTree(bTree->m_pLeft);
    	bTree->m_pRight = CreateTree(bTree->m_pRight);
    	return bTree;
    }
    
    //三种递归遍历方法
    
    void Preorder(BinaryTreeNode *bTree)		//这个是先序遍历,先根,左子树,右子树
    {
    	if (bTree != NULL)
    	{
    		printf("%d ", bTree->m_nValue);
    		Preorder(bTree->m_pLeft);
    		Preorder(bTree->m_pRight);
    	}
    }
    
    void Inorder(BinaryTreeNode *bTree)		//中序遍历,左子树,根,右子树
    {
    	if (bTree != NULL)
    	{
    		Inorder(bTree->m_pLeft);
    		printf("%d ", bTree->m_nValue);
    		Inorder(bTree->m_pRight);
    	}
    }
    
    void Postorder(BinaryTreeNode *bTree)		//后序遍历,左子树,右子树,根
    {
    
    	if (bTree != NULL)
    	{
    		Postorder(bTree->m_pLeft);
    		Postorder(bTree->m_pRight);
    		printf("%d ", bTree->m_nValue);
    	}
    }
    int main()
    {
    	BinaryTreeNode *bTree;
    	bTree = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
    	bTree = CreateTree(bTree);
    	printf("先序遍历结果为:
    ");
    	Preorder(bTree);
    	printf("
    ");
    
    	printf("中序遍历结果为:
    ");
    	Inorder(bTree);
    	printf("
    ");
    
    	printf("后序序遍历结果为:
    ");
    	Postorder(bTree);
    	printf("
    ");
    
    	return 0;
    	system("pause");
    
    }
    

      






    来源:http://www.chengxuyuans.com/code/C++/65465.html
  • 相关阅读:
    转:【More Effective C#】Lambda表达式优化
    转:Highcharts图表控件的使用
    C# subString的理解
    转:TimeSpan的用法
    Android学习笔记一:Android基本组件和Activity生命周期
    IIS 反向代理设置
    WebApi 身份认证解决方案:Basic基础认证
    Calling async method synchronously
    C# 公共类
    aspnet-api-versioning
  • 原文地址:https://www.cnblogs.com/mrethan/p/4143349.html
Copyright © 2011-2022 走看看