操作给定的二叉树,将其变换为源二叉树的镜像。

题目描述

输入描述:
二叉树的镜像定义:源二叉树
    	    8
    	   /      	  6   10
    	 / \  /     	5  7 9 11
    	镜像二叉树
    	    8
    	   /      	  10   6
    	 / \  /     	11 9 7  5

class Solution {
public:
         //栈的非递归
     void Mirror(TreeNode *pRoot) {
         if (pRoot == NULL)return;
         stack<TreeNode*> st;
         TreeNode* p = NULL;
         st.push(pRoot);
         while (st.size())
         {
             p = st.top();
             st.pop();
             swap(p->left, p->right);
             if (p->left)st.push(p->left);
             if (p->right)st.push(p->right);
         }
     }  //队列的非递归
    void Mirror(TreeNode *pRoot) {
         if (pRoot == NULL)return;
         queue<TreeNode*> qu;
         TreeNode* p = NULL;
         qu.push(pRoot);
         while (qu.size())
         {
             p = qu.front();
             qu.pop();
             swap(p->left, p->right);
             if (p->left)qu.push(p->left);
             if (p->right)qu.push(p->right);
         }
    }
    //递归
    void Mirror(TreeNode *pRoot) {
         if (pRoot == NULL)return;
         swap(pRoot->left, pRoot->right);
         Mirror(pRoot->left);
         Mirror(pRoot->right);
    }
};

时间: 2024-10-13 19:46:35

操作给定的二叉树,将其变换为源二叉树的镜像。的相关文章

【javascript】操作给定的二叉树,将其变换为源二叉树的镜像。

操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 代码如下: function Mirror(root) { // write code here if(root) { var temp = root.left; root.left = root.right; root.right = temp; Mirror(root.left); Mirror(ro

剑指offer18:操作给定的二叉树,将其变换为源二叉树的镜像。

1 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 2 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 3 思路和方法 (1)递归思想,先交换根节点的左右子树的位置,然后向下递归,把左右子树的根节点作为下次循环的根节点. (2)非递归:所以我们可以采用前序遍历的方法进行操作,每当遇到一个结点的时候,首先判断其是否有左右孩子(有其中之一即可),如果有的话,就交换其左右孩子,然后继续遍历其左右

操作给定的二叉树,将其变换为源二叉树的镜像

1 class Solution { 2 public: 3 void Mirror(TreeNode *pRoot) { 4 if(pRoot==NULL){ 5 return; 6 } 7 if(pRoot -> left==NULL&&pRoot ->right==NULL){ 8 return; 9 } 10 TreeNode *temp = pRoot -> left; 11 pRoot -> left = pRoot -> right; 12 pR

比较两棵二叉树--(比较两棵二叉树是否相同/判断一棵二叉树是否是另一棵二叉树的子树)

一,问题介绍 本文章讨论两个问题: ①如何判断两棵二叉树的结构是一样的.对应的每个结点都有着相同的值.--即判断两棵二叉树是一样的 ②给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子结构 ③给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子树 注意,子结点与子树有那么一点点不同. 上面的二叉树B 是二叉树A 的子结构,但是不能说是二叉树A的子树.但是二叉树C 是 二叉树A的子树. 二,问题分析 1,如何判断两棵二叉树的结构是一样的.且对应的每个结点都有着相同的值. 对于①如何判断两棵二叉树

LeetCode 145 Binary Tree Postorder Traversal(二叉树的后续遍历)+(二叉树、迭代)

翻译 给定一个二叉树,返回其后续遍历的节点的值. 例如: 给定二叉树为 {1, #, 2, 3} 1 2 / 3 返回 [3, 2, 1] 备注:用递归是微不足道的,你可以用迭代来完成它吗? 原文 Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [3,2,1]. Note: Recur

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

二叉树 根据后序遍历生成二叉树

题目:给定一个二叉树的后序遍历数组arr[],生成二叉树 解题思路:根据搜索二叉树的性质,数组的最后一位arr[end]是二叉树的根,而且数组的左部分比arr[end]小,是根节点的左子数,数字的右部分比arr[end]大,是数组的右子数. Example: 树的形状如上图,后序遍历为:1 3 2 6  8 7 5 arr[end] = 5; 左部分(左子树):{1,3,2} 右部分(右子树):{6,8,7} package cn.edu.algorithm.prototype; /** * 根

LeetCode 145 Binary Tree Postorder Traversal(二叉树的兴许遍历)+(二叉树、迭代)

翻译 给定一个二叉树.返回其兴许遍历的节点的值. 比如: 给定二叉树为 {1. #, 2, 3} 1 2 / 3 返回 [3, 2, 1] 备注:用递归是微不足道的,你能够用迭代来完毕它吗? 原文 Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [3,2,1]. Note: Recur

二叉树的应用(1)--二叉树排序树基本操作

#include <cstdio> struct BSTNode { int m_nval; //数据域 BSTNode *m_pleft; // 左孩子节点 BSTNode *m_pright; //右孩子节点 }; /************************************************************************ 功能:在二叉排序树中 查找key值,如果找到,返回true,且plast指向该节点. plastfahter指向该双双亲节点.如果