【數據結構】-樹-求樹中雙分支節點的個數

思路:

1.非遞歸算法:隨便搞個遍歷算法,分別判斷每個節點的左右孩子是否不爲空,設置一個計數器來記錄數據

2.遞歸算法:

如果p節點的左右孩子都沒有:以p爲根的樹的雙分支節點個數爲0

如果 p節點的左右孩子都有:以p爲根的樹的雙分支節點個數=p節點左子樹的雙分支結點個數+p節點右子樹的雙分支結點個數+1(p節點自己)

如果p節點只有一個孩子:以p爲根的樹的雙分支節點個數=p節點左子樹的雙分支結點個數+p節點右子樹的雙分支結點個數

 

int Count_lr_Child(BiTree T) {
	if (T == NULL)return 0;
	int res = 0;
	stack<BiTNode*> S;
	BiTNode* p = T;
	while (p||!S.empty())
	{
		if(p)
		{	
			S.push(p);
			p = p->lchild;	
		}
		else{
			p = S.top();
			S.pop();
			if (p->rchild&&p->lchild)res++;
			p = p->rchild;
		}
	}
	return res;
}

int Count_lr_Child_DG(BiTree T) {
	if (T == NULL)return 0;
	else if (T->lchild&&T->rchild)return Count_lr_Child_DG(T->lchild) + Count_lr_Child_DG(T->rchild)+1;
	else return Count_lr_Child_DG(T->lchild) + Count_lr_Child_DG(T->rchild);
}

void eight_4_3(BiTree T) {
	//查找雙分支節點的個數
	cout << "(非遞歸)雙分支節點的個數:"<< Count_lr_Child(T)<<endl;
	cout << "(遞歸)雙分支節點的個數:" << Count_lr_Child_DG(T)<<endl;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章