PHP 演算法 二叉樹的子結構判斷的PHP實現

2021-09-27 09:05:58 字數 1693 閱讀 5663

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

1.子樹的意思是包含了乙個節點,就得包含這個節點下的所有節點,兩棵樹同時到底

2.子結構可以是a樹的任意一部分

思路:1.第乙個遞迴:a和b兩棵樹,先在a中找到與b的根結點相同的點,如果a的根不是,那就遞迴a的左右子樹來找

2.第二個遞迴:從兩棵樹的根結點開始進行比較,遍歷的過程中,如果b樹為空,則返回true;如果b不為空,a為空,返回false

a樹的結點值與b樹的不同,返回false;

短路運算子&&,遞迴a的左子樹,b的左子樹;遞迴a的右子樹,b的右子樹

hassubtree(treea,treeb)

if(treea->val==treeb->val)//

根結點相同

res=tree1hastreeb(treea.treeb)

if !res

res=hassubtree(treea->left.treeb)//

第一層遍歷

if !res

res=hassubtree(treea->right.treeb)//

第一層遍歷

return

restree1hastreeb(treea,treeb)

//順序不能變

if treeb==null

//b到底的時候,就是true

return

true

if treea==null

return

false

//b沒到底,a到底了,就是false

if treea->val!=treeb->val //

a和b的結點沒對上

return

false

//短路語法 ,如果前面的是false,直接返回false,後面不用走

return tree1hastreeb(treea->left,treeb->left)&&tree1hastreeb(treea->right,treeb->right)

<?php

class

treenode }//

構造兩棵樹

$node1=new treenode(1);

$node2=new treenode(2);

$node3=new treenode(3);

$node4=new treenode(4);

$node5=new treenode(5);

$treea=$node1

;$node1->left=$node2

;$node1->right=$node3

;$node3->left=$node4

;$node3->right=$node5;//

var_dump($treea);

$node6=new treenode(3);

$node7=new treenode(4);

$node6->left=$node7

;$treeb=$node6;//

var_dump($treeb);

function hassubtree($proot1,$proot2

)function tree1hastree2($treea,$treeb

)var_dump(hassubtree($treea,$treeb));

二叉樹的子結構

include include stack include queue using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return0 輸...

二叉樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 第一種方法是使用遞迴的思想,第一步通過遞迴找到 跟子樹根節點相同的 結點,找到後 呼叫 函式chen,再依次遞迴比較每乙個 結點 是否相等。這種遞迴的時間複雜度 太高了 在牛客上執行不過去。class solut...

二叉樹 樹的子結構

題目描述 給定兩棵二叉樹tree1與tree2,現在要求判斷tree2是否為tree1的乙個子樹.分析 可以使用遞迴的方法,找到與tree2根節點值相同的tree1的節點n,然後遞迴呼叫函式對以n為根節點的子樹進行判定。include include using namespace std defi...