title: 每日一練(15):二叉樹的映象
categories:[劍指offer]
tags:[每日一練]
date: 2022/01/28
請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。
例如輸入:
4
/ \
2 7
/ \ / \
1 3 6 9
映象輸出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例 1:
輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]
限制:0 <= 節點個數 <= 1000
思路與演算法
這是一道很經典的二叉樹問題。顯然,我們從根節點開始,遞迴地對樹進行遍歷,並從葉子節點先開始翻轉得到映象。如果當前遍歷到的節點 root 的左右兩棵子樹都已經翻轉得到映象,那麼我們只需要交換兩棵子樹的位置,即可得到以 root 為根節點的整棵子樹的映象。
//1
treenode* mirrortree(treenode* root)
treenode *left = mirrortree(root->left);
treenode *right = mirrortree(root->right);
root->left = right;
root->right = left;
return root;
}//2
treenode* mirrortree(treenode* root)
swap(root->left, root->right);//交換左右節點
mirrortree(root->left);//對右節點遞迴
mirrortree(root->right);//對左節點遞迴
return root;
}
利用棧(或佇列)遍歷樹的所有節點 node ,並交換每個 node 的左 / 右子節點。
演算法流程:
返回值: 返回根節點 root 。
複雜度分析:
// 迭代
// 棧
treenode* mirrortree(treenode* root)
stacksck;
sck.push(root);
while (!sck.empty())
swap(tmp->left,tmp->right);
if(tmp->right != null)
if(tmp->left != null)
}return root;
}// 佇列
treenode* mirrortree(treenode* root)
queueque;
que.push(root);
while (!que.empty())
swap(tmp->left,tmp->right);
if(tmp->left)
if(tmp->right)
}return root;
}
每日一練之二叉樹的深度
方法一 遞迴void treedepthhelper treenode proot,int curr,int max return treedepthhelper proot left,curr 1,max treedepthhelper proot right,curr 1,max inttree...
LeetCode每日一練 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 輸出 3深度優先 coding utf 8 構造乙個二叉樹類 class treenode def init self,x,y no...
c語言 每週一練 平衡二叉樹
平衡二叉樹是這樣一棵樹 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。查詢 插入和刪除在平均和最壞情況下都是o log n 可以用於資料庫設計,記憶體分配演算法等。平衡二叉查詢樹 written by huals 2012.10.13 include i...