博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树及排序二叉树的相关操作汇总
阅读量:6994 次
发布时间:2019-06-27

本文共 3295 字,大约阅读时间需要 10 分钟。

前记:由于种种原因,以前一看到什么树啊链表啊,那就相当的恐惧,真是惭愧,最近仔细研究了一下这些东西,发现也就那样,或许是我之前根本就没怎么花心思学。。

话不多说,下面就直接上代码吧,也没什么好解释的,只要我自己理解代码就行了,哈哈哈。。。

代码参考《C和C++程序员面试秘笈》一书

// Tree.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#include
#include
using namespace std;class TreeNode{public: int data; TreeNode *parent; TreeNode *left; TreeNode *right; TreeNode(int num):data(num),parent(NULL),left(NULL),right(NULL){};};TreeNode *root;//将data插入到排序二叉树中//首先需要找到需要插入数据的父节点,//然后再判断是插在父节点左边还是右边void insert_TreeNode(int data){ TreeNode *p1,*p2,*temp; p1=new TreeNode(data); p2=root; while(p2) { temp=p2; if (data
data) p2=p2->left; else if(data>p2->data) p2=p2->right; else { cout<<"要插入的数据"<
<<"已经存在于二叉树中,不能重复插入"<
parent=temp; if (data
data) { temp->left=p1; } else temp->right=p1;}//创建二叉树//采取数组元素填充的方式创建//函数调用insert_TreeNode()函数不断插入节点创建二叉树void creat(int *num,int len){ root=new TreeNode(num[0]); for (int i=1;i
data<<" "; recursive_pre_show_TreeNode(current->left); recursive_pre_show_TreeNode(current->right); }}void recursive_mid_show_TreeNode(TreeNode *current){ if (current) { recursive_mid_show_TreeNode(current->left); cout<
data<<" "; recursive_mid_show_TreeNode(current->right); }}void recursive_end_show_TreeNode(TreeNode *current){ if (current) { recursive_end_show_TreeNode(current->left); recursive_end_show_TreeNode(current->right); cout<
data<<" "; }}void recursive_show_TreeNode(){ if (root==NULL) { cout<<"二叉树为空"<
stack; cout<<"非递归前序遍历。。。"<
data<<" "; stack.push(p); p=p->left; } if (!stack.empty()) { p=stack.top(); stack.pop(); p=p->right; } } cout<
stack; TreeNode *p=root; cout<<"非递归中序遍历。。。"<
left; } if (!stack.empty()) { p=stack.top(); stack.pop(); cout<
data<<" "; p=p->right; } } cout<
left) { delete_TreeNode(p->left); } if (p->right) { delete_TreeNode(p->right); } if (p->parent==NULL) //根节点 { p->left=NULL; p->right=NULL; ::root=NULL; delete p; p=NULL; return; } //判断是要删除左边的还是右边的子节点 if (p->parent->data>p->data) { p->parent->left=NULL; } else p->parent->right=NULL; delete p; p=NULL;}//删除二叉树节点//首先需要找到该节点//然后调用delete_TreeNode(TreeNode *p)函数删除找到的节点及其子节点void delete_TreeNode(TreeNode *root,int data){ if (root==NULL) { cout<<"二叉树为空"<
data) { p=p->left; } else if (data>p->data) { p=p->right; } else { delete_TreeNode(p); return; } }}//层次遍历二叉树//首先根节点入队//然后根节点出队 根节点的左右节点若不为空也入队//父节点出队 子节点入队void level_show_TreeNode(TreeNode *root){ if (root==NULL) { cout<<"二叉树为空"<
queue; queue.push(root); while(!queue.empty()) { p=queue.front(); queue.pop(); cout<
data<<" "; if (p->left!=NULL) { queue.push(p->left); } if (p->right!=NULL) { queue.push(p->right); } } cout<
stack; TreeNode *p=root; int lastvalue=0; while(p!=NULL||!stack.empty()) { while(p) { stack.push(p); p=p->left; } if (!stack.empty()) { p=stack.top(); stack.pop(); if (lastvalue==0||lastvalue
data) //lastvalue==0表示第一次出栈 { lastvalue=p->data; } else if (lastvalue>p->data) { return false; } p=p->right; } } return true;}int _tmain(int argc, _TCHAR* argv[]){ int num[8]={ 5,3,7,2,4,6,8,1}; creat(num,8); recursive_show_TreeNode(); pre_show_TreeNode(root); mid_show_TreeNode(root); cout<
<<"删除节点后。。。"<

 

转载于:https://www.cnblogs.com/audi-car/p/4572704.html

你可能感兴趣的文章