lc1367 二叉树中的列表
给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。
如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。
一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。
public class Solution{
private ListNode listNode;
public boolean isSubPath(ListNode head, TreeNode root) {
listNode = head;
boolean flag = false;
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
//循环遍历树中每个节点 前序遍历
while(!stack.empty()){
TreeNode treeNode = stack.pop();
while(treeNode != null){
flag = traversal(head,treeNode);
if(flag){
return true;
}
if(treeNode.right != null){
stack.push(treeNode.right);
}
treeNode = treeNode.left;
}
}
return false;
}
private boolean traversal(ListNode temp_list,TreeNode temp_tree){
if(temp_list == null){
return true;
}
if(temp_tree == null){
return false;
}
if(temp_list.val != temp_tree.val && listNode != temp_list){
return false;
}
if(temp_list.val == temp_tree.val){
temp_list = temp_list.next;
}
return traversal(temp_list,temp_tree.left)||traversal(temp_list,temp_tree.right);
}
}
内存还不错,就这时间有点丢脸啊