二叉树的镜像


输入一棵二叉树的根结点,求该树的深度,从根结点到叶结点依次经过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度

#include <iostream>
using namespace std;

struct BinaryTreeNode
{
 int data;
 struct BinaryTreeNode *lchild;
 struct BinaryTreeNode *rchild;
};

typedef struct BinaryTreeNode BinTreeNode;

//先序构造二叉树
BinTreeNode* preOrderCreateTree(BinTreeNode *head)
{
 int tmp;
 cin >> tmp;
 if (tmp == 0)
  head = NULL;
 else
 {
  head = new BinTreeNode;
  head->data = tmp;
  head->lchild = preOrderCreateTree(head->lchild);
  head->rchild = preOrderCreateTree(head->rchild);
 }
 
 return head;
}

//先序遍历二叉树
void preVisitTree(const BinTreeNode *head)
{
 if (head == NULL)
  return;
 
 cout << head->data;
 preVisitTree(head->lchild);
 preVisitTree(head->rchild);
}

void freeTree(BinTreeNode *head)
{
 if (head == NULL)
  return;
 
 freeTree(head->lchild);
 freeTree(head->rchild);
 delete head;
}

BinTreeNode* getTreeReverse(BinTreeNode *head)
{
 if (head == NULL)
  return NULL;
 if (head->lchild || head->rchild)
 {
  BinTreeNode *tmp;
  tmp = head->lchild;
  head->lchild = head->rchild;
  head->rchild = tmp;
 }
 head->lchild = getTreeReverse(head->lchild);
 head->rchild = getTreeReverse(head->rchild);
 return head;
}

int main()
{
 BinTreeNode *root = NULL;
 root = preOrderCreateTree(root);
 preVisitTree(root);
 cout << endl;
 root = getTreeReverse(root);
 preVisitTree(root);
 cout << endl;  
 freeTree(root); 
 return 0;
}

二叉树的常见问题及其解决程序

【递归】二叉树的先序建立及遍历

在JAVA中实现的二叉树结构

【非递归】二叉树的建立及遍历

二叉树递归实现与二重指针

二叉树先序中序非递归算法

轻松搞定面试中的二叉树题目

本文永久更新链接地址:

相关内容