1. 要有递归思想:考虑一个由根节点和左右儿子构成的子树,这是一个最简单的模型,其中左右儿子也是可以递归的子树,一切围绕树的操作都可以泛化为左子树、根节点、右子树三者之间的互动,然后用 dfs 遍历整棵树即可。
2. 边界条件不要考虑叶子节点,要考虑叶子节点的儿子(为空指针),叶子节点的判断条件太啰嗦(root->left==NULL && root->right==NULL)
3. 如果树中的节点没有父指针,不要费劲建立父指针,可以在递归回溯时,把左子树、右子树的根节点当作他们的父节点进行操作。
(详情见 LeetCode 979. 在二叉树中分配硬币)