1367 二叉樹中的列表

2021-10-17 14:16:48 字數 1948 閱讀 7036

題目描述:

給你一棵以 root 為根的二叉樹和乙個 head 為第乙個節點的鍊錶。

如果在二叉樹中,存在一條一直向下的路徑,且每個點的數值恰好一一對應以 head 為首的鍊錶中每個節點的值,那麼請你返回 true ,否則返回 false 。

一直向下的路徑的意思是:從樹中某個節點開始,一直連續向下的路徑。

示例 1:

輸入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]

輸出:true

解釋:樹中藍色的節點構成了與鍊錶對應的子路徑。

示例 2:

輸入:head = [1,4,2,6], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]

輸出:true

示例 3:

輸入:head = [1,4,2,6,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]

輸出:false

解釋:二叉樹中不存在一一對應鍊錶的路徑。

二叉樹和鍊錶中的每個節點的值都滿足 1 <= node.val <= 100 。

鍊錶包含的節點數目在 1 到 100 之間。

二叉樹包含的節點數目在 1 到 2500 之間。

方法1:

(1)遞迴;

(2)先遞迴找根節點和鍊錶第乙個值相同的結點;

(3)找到之後,從樹的該節點開始,遞迴向下判斷是否存在和鍊錶相同的路徑;

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*//**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

if(root==

null

||root-

>val!=head-

>val)

return

is_valid

(head-

>next,root-

>left)

||is_valid

(head-

>next,root-

>right)

;//接著向下判斷樹和鍊錶

}bool

issubpath

(listnode* head, treenode* root)

if(root-

>val==head-

>val)

}return

issubpath

(head,root-

>left)

||issubpath

(head,root-

>right)

;//遞迴找符合要求的樹的結點}}

;

1367 二叉樹中的列表C

二叉樹資料結構如下 definition of binary tree node struct treenode 本題需要注意一點是子節點的匹配結果是受到父節點匹配結果影響的。分為兩種情況 父節點匹配成功 父節點匹配失敗 父節點匹配成功的情況 tree空 tree不空 list空 true true...

LeetCode 1367 二叉樹中的列表

給你一棵以 root 為根的二叉樹和乙個 head 為第乙個節點的鍊錶。如果在二叉樹中,存在一條一直向下的路徑,且每個點的數值恰好一一對應以 head 為首的鍊錶中每個節點的值,那麼請你返回 true 否則返回 false 一直向下的路徑的意思是 從樹中某個節點開始,一直連續向下的路徑。示例 1 注...

leetcode1367 二叉樹中的列表

給你一棵以 root 為根的二叉樹和乙個 head 為第乙個節點的鍊錶。如果在二叉樹中,存在一條一直向下的路徑,且每個點的數值恰好一一對應以 head 為首的鍊錶中每個節點的值,那麼請你返回 true 否則返回 false 一直向下的路徑的意思是 從樹中某個節點開始,一直連續向下的路徑。示例 1 輸...