描述
給一棵二叉樹,找到最長連續路徑的長度。
這條路徑是指 任何的節點序列中的起始節點到樹中的任一節點都必須遵循 父-子 聯絡。最長的連續路徑必須是從父親節點到孩子節點(不能逆序)。
樣例 舉個例子:
1\3
/ \2 4
\5
最長的連續路徑為 3-4-5,所以返回 3。
2\3
/ 2
/ 1
最長的連續路徑為 2-3 ,而不是 3-2-1 ,所以返回 2。
思路
#ifndef c595_h
#define c595_h
#include
#include
using
namespace
std;
class treenode
};class solution
return max;
}//從根節點開始處理,存放根節點及其連續序列長度,分別處理左右結點
//如果結點子樹的值為結點的值+1,則其連續序列長度為結點連續序列長度+1
void helper(treenode *root)
else
m[root->left] = 1;
helper(root->left);
}if (root->right)
else
m[root->right] = 1;
helper(root->right);}}
mapint> m;//存放結點及其連續序列的長度
};#endif
LintCode 595 二叉樹最長連續序列
給一棵二叉樹,找到最長連續路徑的長度。這條路徑是指 任何的節點序列中的起始節點到樹中的任一節點都必須遵循 父 子 聯絡。最長的連續路徑必須是從父親節點到孩子節點 不能逆序 樣例舉個例子 1 3 2 4 5 最長的連續路徑為 3 4 5,所以返回 3。2 3 2 1 最長的連續路徑為 2 3 而不是 ...
二叉樹最長路徑
先參考最長子序列求解方法,先序遍歷的時候,我們把當前遍歷的分支作為乙個序列,然後利用最長序列的方式求解。遞迴過程中,保留樹的高度,用高度差作為長度。注意遞迴結束時,需要從雜湊表中移除當前節點的值。include include include include const int tag 100 st...
二叉樹 根據二叉樹遍歷序列構造二叉樹
二叉樹的節點型別宣告如下 struct btnode 定理1任何 n 0 個不同節點的二叉樹,都可由它的前序序列和中序序列唯一地確定。根據前序遍歷的特點,知前序序列 presequence 的首個元素 presequence 0 為二叉樹的根 root 然後在中序序列 insequence 中查詢此...