首页 > 其他分享 >翻转二叉树

翻转二叉树

时间:2023-08-02 17:34:22浏览次数:28  
标签:Node node right qu temp 二叉树 left 翻转

思路:
使用层序遍历的方法:
将根节点入队,然后将根节点的左节点和右节点交换,每次for循环都执行“如果左节点不为空则将左节点入队,如果右节点不为空就将右节点入队,队头出队,将队头的左右结点交换,然后队头的左右节点不为空,将队头的左右结点入队。

 1 void ceng(Node* node, vector<vector<int>>& result) {
 2     queue<Node*>qu;
 3     qu.push(node);
 4     Node* temp = node;
 5     int size = 0;
 6     //只有temp为空的情况下采取判断st是否为空
 7     while (!qu.empty()) {
 8         size = qu.size();
 9         vector<int>vec;
10         for (int i = 0; i < size; i++) {
11             temp = qu.front();
12             vec.push_back(temp->data_);
13             qu.pop();
14             if (temp->left) {
15                 qu.push(temp->left);
16             }
17             if (temp->right) {
18                 qu.push(temp->right);
19             }
20         }
21         result.push_back(vec);
22     }
23 }
24 void change(Node* node) {
25     queue<Node*>qu;
26     if (node == nullptr) return;
27     qu.push(node);
28     Node* change;
29     Node* temp;
30     int size = 0;
31     //只有temp为空的情况下采取判断st是否为空
32     while (!qu.empty()) {
33         size = qu.size();
34         for (int i = 0; i < size; i++) {
35             temp = qu.front();
36             qu.pop();
37             change = temp->left;
38             temp->left = temp->right;
39             temp->right = change;
40             if (temp->left) {
41                 qu.push(temp->left);
42             }
43             if (temp->right) {
44                 qu.push(temp->right);
45             }
46         }
47     }
48 }
49 int main() {
50     Node* node1 = new Node(6);
51     Node* node2 = new Node(3);
52     Node* node3 = new Node(9);
53     Node* node4 = new Node(1);
54     Node* node5 = new Node(4);
55     Node* node6 = new Node(8);
56     Node* node7 = new Node(0);
57     node1->left = node2;
58     node1->right = node3;
59     node2->left = node4;
60     node2->right = node5;
61     node3->left = node6;
62     node4->left = node7;
63     vector<vector<int>>result;
64     change(node1);
65     ceng(node1, result);
66     for (auto& v : result) {
67         for (auto& in : v) {
68             cout << in << endl;
69         }
70     }
71 }

前序遍历:
将一个节点的左右结点进行反转,并将该结点的左节点的左右结点进行反转和右节点的左右结点进行反转

 1     TreeNode* invertTree(TreeNode* root) {
 2         if (root == NULL) return root;
 3         stack<TreeNode*> st;
 4         st.push(root);
 5         while(!st.empty()) {
 6             TreeNode* node = st.top();              // 中
 7             st.pop();
 8             swap(node->left, node->right);
 9             if(node->right) st.push(node->right);   // 右
10             if(node->left) st.push(node->left);     // 左
11         }
12         return root;
13     }

 

标签:Node,node,right,qu,temp,二叉树,left,翻转
From: https://www.cnblogs.com/Sandals-little/p/17601311.html

相关文章

  • 对称二叉树
    1boolcompare(Node*left,Node*right){2if(left==NULL&&right!=NULL)returnfalse;3elseif(left!=NULL&&right==NULL)returnfalse;4elseif(left==NULL&&right==NULL)returntrue;5//排除了空节点......
  • [算法题python]822.翻转卡片游戏
    在桌子上有 n 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。我们可以先翻转任意张卡片,然后选择其中一张卡片。如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。哪个数是这些想要的数字中最小的......
  • 二叉树遍历
    递归实现:前序遍历将根结点输入容器,然后对左子树进行先序遍历,再对右子树进行先序遍历1voidfrontfind(Node*node,vector<int>&vec){2if(node==nullptr){3return;4}5//非终止条件,非递归入口,只需考虑如果只有一个结点需要做什么6......
  • 二叉树的结点个数
    二叉树的节点个数假设二叉树如下图所示:要想知道二叉树的节点个数,我们通常会想到遍历二叉树的同时使用一个变量来记录,假设变量为size,使用前序遍历,每遍历一个结点让size++,可设置程序如下:intTreeSize(BTNode*root){ intsize=0; if(root==NULL) { return0; } size......
  • 110. 平衡二叉树
    给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例1:输入:root=[3,9,20,null,null,15,7]输出:true#Definitionforabinarytreenode.#classTreeNode:#def__init__(se......
  • 树与二叉树
    树的概念:根有子节点,子节点又是一个子树的根T1,T2,T3换一个顺序就不是原来的树了,就称为有序树,T1,T2,T3换一个顺序就还是原来的树,就称为无序树二叉树不是树的特殊情况,二叉树中的一个结点必须表明该结点是左节点还是右节点,即便它没有兄弟结点。而树不必区分左右。  二叉......
  • 104. 二叉树的最大深度
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。#Definitionforabinarytreenode.......
  • 二叉树的广度优先遍历
    二叉树的广度优先遍历层序遍历设二叉树的根节点所在层数为第一层,层序遍历就是从二叉树的根节点出发,先访问第一层的根节点,然后从左到右访问第2层上的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。要想用代码实现队列的层序遍历我们需要借助队列:1、先把根......
  • 101. 对称二叉树
    给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#s......
  • 二叉树某个节点的深度
    微信公众号:码云成化关注可了解更多的教程及进阶技巧。问题或建议,请公众号留言;如果你觉得阿云对你有所帮助,欢迎赞赏深度的定义[当前结点的层数。默认叶子节点是null节点,深度是0。其子节点是null节点,深度是1。]普通二叉树给出上图一个普通二叉树,如果计算结点深度,......