每日一練(15) 二叉樹的映象

2022-09-19 15:24:12 字數 1679 閱讀 5710

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...