基本**:
#pragma once
#include #include #include #include using namespace std;
template struct binarytreenode
};template class binarytree
binarytree(t* a, size_t n, const t& invalid)
node* createtree(t* a, size_t n, const t& invalid, size_t& index)
return root;
} ~binarytree()
void destroy(node* root) //後序刪除
destroy(root->_left);
destroy(root->_right);
delete root;
} //t2(t1)
binarytree(const binarytree& t) //拷貝構造
node* _copy(node* root)
node* newroot = new node(root->_data);
newroot->_left = _copy(root->_left);
newroot->_right = _copy(root->_right);
return newroot;
} //傳統寫法
binarytree& operator=(const binarytree& t) //賦值運算子的過載
return *this;
} //現**法
/*binarytree& operator=(binarytreet)//呼叫拷貝建構函式拷貝t
*/ void prevorder()
void inorder()
void postorder()
void levelorder()
void prevordernonr() //非遞迴《利用棧》
node* front = s.top();
s.pop();
//子問題的方式訪問右樹
cur = front->_right;
} }void inordernonr()
node* front = s.top();
cout << front->_data << " ";
s.pop();
//訪問右樹,子問題
cur = front->_right;
} }void postordernonr()
node* front = s.top();
if (front->_right == null || front->_right== prev)
else
}cout << endl;
} size_t getklevel(size_t k) //k層葉子節點數
size_t depth()
size_t size()
size_t leafsize() //求葉子節點數
node* find(const t& x)
protected:
void _prevorder(node* root) //前序
cout << root->_data << " ";
_prevorder(root->_left);
_prevorder(root->_right);
}void _inorder(node* root) //中序
_inorder(root->_left);
cout << root->_data << " ";
_inorder(root->_right); }
void _postorder(node* root) //後序
_postorder(root->_left);
_postorder(root->_right);
cout << root->_data << " ";
} //寬度
//大數
void _levelorder() // 層序//思想:用佇列的先進先出//在寫一遍
while (!q.empty())
if (front->_right)
q.pop();
} cout << endl;
} bool iscompletetree() //判斷是否為完全樹 // 層序//思想:用佇列的先進先出//在寫一遍
bool tag = true;
while (!q.empty())
q.push(front->_left);
}else
if (front->_right)
q.push(front->_right);
}else
}} size_t _getklevel(node* root, size_t k) //第k層的節點數
if (k == 1)
return _getklevel(root->_left, k - 1) + _getklevel(root->_right, k - 1);
} size_t _depth(node* root) //求二叉樹的深度
if (root->_left == null && root->_right == null)
size_t left = _depth(root->_left);
size_t right = _depth(root->_right);
return (left > right) ? left + 1 : right + 1;
} size_t _size(node* root) //求總節點個數
return _size(root->_left) + _size(_root->_right) + 1;
} size_t _leafsize(node* root) //求葉子節點數
else //不是空樹
return _leafsize(root->_left) + _leafsize(root->_right);
} }node* _find(node* root, const t& x)
if (root->_data == x)
node* ret = _find(root->_left, x);//要接受返回值
if (ret) //ret不等於空說明找到了
else
}bool isintree(node* root, const t& x) //思考
if (root->_data == x)
/*if (isintree(root->_left,x))
return isintree(root->_right,x); */
//或者
return isintree(root->_left, x) || isintree(root->_right, x);
} node* _root;
};
二叉樹 基本知識點
資料結構實驗之二叉樹二 遍歷二叉樹 problem description 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並按中序和後序的方式遍歷該二叉樹。input 連續輸入多組資料,每組資料輸入乙個長度小於50個字元的字串。output 每組輸入資...
資料結構 二叉樹的基本知識點總結
樹是一種資料結構,它是由n n 1 個有限的結點組成的具有層次關係的集合。樹具有的特點有 1 每個結點有零個或多個子結點 2 沒有父節點的結點稱為根節點 3 每乙個非根結點有且只有乙個父節點 4 除了根結點外,每個子結點可以分為多個不相交的子樹。樹的基本術語有 若乙個結點有子樹,那麼該結點稱為子樹根...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...