226. 翻轉二叉樹
聽說 homebrew的作者max howell,就是因為沒在白板上寫出翻轉二叉樹,最後被google拒絕了。
遍歷的過程中去翻轉每乙個節點的左右孩子就可以達到整體翻轉的效果。
「注意只要把每乙個節點的左右孩子翻轉一下,就可以達到整體翻轉的效果」
「這道題目使用前序遍歷和後序遍歷都可以,唯獨中序遍歷不行,因為中序遍歷會把某些節點的左右孩子翻轉了兩次!建議拿紙畫一畫,就理解了」
遞迴三部曲:
1.確定遞迴函式的引數和返回值
引數就是要傳入節點的指標,不需要其他引數了,通常此時定下來主要引數,如果在寫遞迴的邏輯中發現還需要其他引數的時候,隨時補充。
返回值的話其實也不需要,但是題目中給出的要返回root節點的指標,可以直接使用題目定義好的函式,所以就函式的返回型別為treenode*
2.確定終止條件
當前節點為空的時候,就返回
3.確定單層遞迴的邏輯
因為是先前序遍歷,所以先進行交換左右孩子節點,然後反轉左子樹,反轉右子樹。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
};
遞迴能做,棧也能做中給出了前中後序迭代方式的寫法,所以本地可以很輕鬆的切出如下迭代法的**:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
if(cur-
>left !=
null)}
return root;}}
;
「二叉樹解題的大忌就是自己稀里糊塗的過了(因為這道題相對簡單),但是也不知道自己是怎麼遍歷的。」 LeetCode (二叉樹)反轉二叉樹
遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
二叉樹反轉
二叉樹反轉,遞迴實現比較簡單,只需要交換父母節點的左右子節點就行,遞迴反轉左右子節點。homebrew作者面試google時解不出這道題而被拒,本文給出c實現的二叉樹反轉,包括前中後遍歷,二叉樹的建立等。反轉 如下 void inversebtree tnode root tnode tmp roo...